嵌套的Prolog函数

时间:2011-10-01 11:59:51

标签: prolog

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').

以上是我的旋转和旁边功能的prolog代码。我如何修改代码以适应像旋转(在(X,Y)旁边)的情况。这是嵌套的

2 个答案:

答案 0 :(得分:3)

看起来你正试图使用​​这些功能。 Prolog方式更像是这样:

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).

答案 1 :(得分:2)

你做不到。这是因为rotatebeside不是函数,它们是谓词。

函数返回值,因此嵌套它们 - 使用一个函数的返回值作为另一个函数的输入。另一方面,当您尝试在Prolog中评估谓词时,它会尝试使用您提供的规则“统一”其所有未绑定参数,并返回是否成功以及如何。

rotate(beside(X,Y)).这样的代码很有价值,但它并不代表你的想法。它尝试评估结构rotate上的谓词beside(X,Y)。它不会尝试评估beside谓词。