使用傳入參數,初始事實和要執行的迭代任務的示例程序。迭代是通過遞歸來實現的。在每次重新進入之前,可以有效地更新與某個參數有關的值,以用於下一輪。
my_loop(N) :- N > 10.
my_loop(N) :- N =< 10,
write(N), nl,
Nextin is N + 1,
my_loop(Nextin).
:- my_loop(1).
答:
給定的信息(事實)由 程序所需。它們可以通過鍵盤輸入提供,作爲初始的 參數給一些謂詞,或者作爲 建議的數據庫中的事實。此外,只針對特殊情況建議,事實 可以被硬編碼到某些謂詞或規則中。
下面和上面是作爲參數傳遞初始信息的示例::- my_predicate(args...)
。
如果有很多事實,數據庫是最好的。一些事實,即每次需要更改 最好從鍵盤獲得。否則, 它可能沒關係。
:- my_predicate([fill(j1,0),fill(j2,5)], Answer),
write(Answer),
nl.
B:
見我 _ 循環例如:
在my_loop,計數[1..10]的任務迭代求解。 作爲參數傳遞給參數:1,主要是因爲 程序反覆做同樣的事情:
1.取一個數(N);如果太大,就退出。否則...
2.打印它。
3.計算下一數(N + 1)
4.重複
10是硬編碼的。這可能是一個事實:stop_after(10)
。
現在的數據進行操縱,在my_loop可變Ñ,和 {J1,J2}在比如說myPredicate實際上並不需要被重新分配過和一遍:見my_loop。重新輸入 計算時,它的時間做同樣 的事情,但使用不同的參數:
cap(j1,2).
cap(j2,5).
my_predicate(Status, Answer) :-
got_juice(Status,0),
Answer=Status.
%%% Instead of changing values, rerun comp. with new values
%%% based on a computation made from the old ones.
my_predicate([filled(j1,J1), filled(j2,J2)], Answer) :-
Used is J1 + J2,
got_juice(Used, J), J \= 0,
cap(j1,C1), cap(C2),
%% Use cap and filled to add more to filled..
NextJ1 is J1 + ...,
NextJ2 is J2 + ...,
my_predicate(filled(j1,NextJ1), filled(..., Answer).
注:
上面的謂詞只是證明在Prolog的迭代,使用的參數「 myProgaram」。有關實際實現,請參閱matcheek評論中提出的程序。
*「...和我**有**編寫程序...」 - - 這是功課嗎? – thkala 2010-12-16 18:16:22
我不清楚究竟是什麼問題。你能給我一個關於大學收到的問題的完整描述嗎? 不知道什麼是確切的問題在這裏,我不能給你一個答案,但..在這裏我發現了一個非常類似的問題,你的答案已經給予http://www.informatik.uni-freiburg.de/~ki/教學/ ws0708 /邏輯/ prolog7.pdf,幻燈片17日起 – matcheek 2010-12-17 03:14:58