2011-10-01 63 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).