這一次,我真的無法理解的錯誤:我寫了這個代碼在某個位置以獲取列表元素:列表搜索是不終止
take_pos([], _, _) :- fail;
take_pos([H|T], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
它永遠不會終止;追蹤它我可以看到它從來不符合第二條語句。另外,如果我查詢take_pos([1,2,3], 1, 1).
它匹配最後一個。
我錯過了什麼?
這一次,我真的無法理解的錯誤:我寫了這個代碼在某個位置以獲取列表元素:列表搜索是不終止
take_pos([], _, _) :- fail;
take_pos([H|T], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
它永遠不會終止;追蹤它我可以看到它從來不符合第二條語句。另外,如果我查詢take_pos([1,2,3], 1, 1).
它匹配最後一個。
我錯過了什麼?
我認爲問題在於你在fail
之後放了一個分號而不是點號。
還要考慮重寫第二個規則,以避免引入單:
take_pos([], _, _) :- fail.
take_pos([H|_], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
您的問題是第一款具有;
,我認爲你的意思.
。 無論如何,第一個條款如果糾正了什麼都不做,所以應該完全刪除:
take_pos([H|T], 1, H).
take_pos([H|T], Pos, X) :- Pos2 is Pos - 1, take_pos(T, Pos2, X).
這個。很好的接收! –