我正在做一個練習,要求實施from_to/3
,在這裏你給出了兩個數字作爲前兩個參數,而Prolog給你列出了它們之間的所有內容作爲結果。例如:會給R=[1,2,3,4,5]
。爲什麼這些類似的項目有不同的結果?
我寫了下面的程序:
fromto(N, O, []):-
N >= O.
fromto(N, O, [N|TailResult]):-
O > N,
O1 is O-1,
fromto(N, O1, TailResult).
通過查詢fromto(3,8,R)
返回五個3的列表。不好。 正確的方式來處理這將是:
from_to(N, O, []) :-
N > O.
from_to(N, O, [N|TailResult]) :-
N =< O,
N1 is N + 1,
from_to(N1, O, TailResult).
這給list 3,4,5,6,7,8
如預期。
我的問題是這是如何工作的。這些程序的不同之處僅在於我用O從上到下進行了處理,並且正確的通過將其添加到N而向上工作。但結果完全不同。 有誰知道是什麼原因造成的?
而不是使用'append/3',使用[tag:dcg] -notation來制定兩種方法會更有見地。 – false
@false你是對的,添加了一個dcg解決方案。 – coder