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)旁边)的情况。这是嵌套的
答案 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)
你做不到。这是因为rotate
和beside
不是函数,它们是谓词。
函数返回值,因此嵌套它们 - 使用一个函数的返回值作为另一个函数的输入。另一方面,当您尝试在Prolog中评估谓词时,它会尝试使用您提供的规则“统一”其所有未绑定参数,并返回是否成功以及如何。
像rotate(beside(X,Y)).
这样的代码很有价值,但它并不代表你的想法。它尝试评估结构rotate
上的谓词beside(X,Y)
。它不会尝试评估beside
谓词。