Вложенные функции Пролога - PullRequest
2 голосов
/ 01 октября 2011
rotate(X):-
write('convert -rotate 90 '),write(X),write(' o.jpg'),
writeln(0).
beside(X,Y):-
write('convert -scale 50%%x50%% '),write(X),writeln(' 0111.jpg'),
write('convert -scale 50%%x50%% '),write(Y),writeln(' 01121.jpg'),
write('convert +append '),write(X),write(Y),writeln(' o.jpg').

выше мои пролог коды для поворота и рядом функций.Как я могу изменить коды в зависимости от случая, как поворот (рядом (X, Y)).которые вложены

Ответы [ 2 ]

3 голосов
/ 01 октября 2011

Похоже, вы пытаетесь использовать эти функции.Путь Пролога выглядит примерно так:

rotate(X,Output):-
write('convert -rotate 90 '),write(X),write(' o.jpg'),
writeln(0),Output='o.jpg'.
beside(X,Y,Output):-
write('convert -scale 50%%x50%% '),write(X),writeln(' 0111.jpg'),
write('convert -scale 50%%x50%% '),write(Y),writeln(' 01121.jpg'),
write('convert +append '),write(X),write(Y),writeln(' o.jpg'),Output='o.jpg'.

, затем используйте

beside(X,Y,Temp),rotate(Temp,Output).
2 голосов
/ 01 октября 2011

Вы не можете.Это потому, что rotate и beside не являются функциями, они являются предикатами.

Функции возвращают значения и, таким образом, вы их вкладываете - используйте возвращаемое значение одной функции в качестве входа другой функции.С другой стороны, когда вы пытаетесь оценить предикат в Прологе, он пытается «объединить» все свои несвязанные параметры, используя заданные вами правила, и возвращает, успешно ли это выполнено и как.* ценится, но это не значит, что вы думаете.Он пытается оценить предикат rotate для структуры beside(X,Y).Он не пытается оценить предикат beside.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...