2011-10-01 66 views
2
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))的情况。这是嵌套的嵌套Prolog功能

回答

2

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

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

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

+0

谢谢,我怎么能解决这个问题的预测呢? – bluedream

2

看起来你正在尝试使用这些类似的功能。序言方式更像是这样的:

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