我試圖做出這樣的謂詞,使得對於列表X和Y,如果X和Y是相同的列表,但事實上Y有更多的元素,則rmlast爲真。所以[1] [1,2]或[3,2] [3,2,5]。Prolog初學者
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.
但是,這對於基本情況以外的任何情況都會產生錯誤結果。
我試圖做出這樣的謂詞,使得對於列表X和Y,如果X和Y是相同的列表,但事實上Y有更多的元素,則rmlast爲真。所以[1] [1,2]或[3,2] [3,2,5]。Prolog初學者
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.
但是,這對於基本情況以外的任何情況都會產生錯誤結果。
您的代碼不起作用,因爲xtail
和ytail
是用小寫字母寫的,因此不是變量。這工作:
rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).
除此之外:
正如你看到的,有沒有必要有變量X
和Y
在這種情況下:只要使用X
兩次,在合適的地方。
你寫:
rmlast([], [_]). :- true.
這是一樣的:
rmlast([], [_]).
:- true.
正如你所看到的,第二條語句添加任何內容,並因此可以安全地取出。
我從來沒有在變量實例化之前真正見過大小寫敏感。那肯定確實解決了,謝謝。 – meunierd 2009-12-03 18:25:17
rmlast([H],[]).
rmlast([H1|Tail1],[H2|Tail2]):-
H1 = H2,rmlast(Tail1,Tail2).
不要用 '是',它不是一個邏輯運算符。這是一個賦值操作符。改用'='。
下一次請標記作業問題,如:http://www.cs.toronto.edu/~yilan/324f09/324f09a5.pdf – Stephan202 2009-12-03 23:33:51