1
與標題狀態一樣,我試圖從子謂詞返回返回值的總和,但它不起作用。這裏是我的代碼:序言謂詞求和不起作用
addlistnum([],[],X).
addlistnum(digits(Y,[A|T]),digits(F,[B|T]),X) :-
X is Y + F.
digits(Num, List) :-
digits(0, List, Num).
digits(Num, [], Num).
digits(N, [A|As], Num) :-
N1 is N * 10 + A,
digits(N1, As, Num).
子謂詞工作正常。它將列表轉換爲整數。現在我想總結轉換後的值。 例子:
?- digits(X,[3,3,3]).
X = 333. % works as expected
大廈上,addlistnum([3,3,3,3],[2,2,2],X)
應該產生X = 3555
(如3555 is 3333 + 222
),但我得到false
代替。
我也試過:
addlistnum([],[],X).
addlistnum([A|T],[B|T],X) :-
X is Y + F,
digits(Y,[A|T]),
digits(F,[B|T]).
它只是簡單地返回false
,它沒有給出有關是錯誤的信息。
這裏存在根本的誤解。你的謂詞子句頭:'addlistnum(digits(Y,[A | T]),digits(F,[B | T]),X)'似乎暗示你將'digits'想象成一個返回值的函數,但它不會那樣工作。當你調用addlistnum([3,3,3,3],[2,2,2],X)'時,Prolog試圖將術語'[3,3,3,3]'與術語相匹配, '[]'或'數字(Y,[A | T])'並且失敗,因爲它們顯然不匹配。 – lurker