1
我正在嘗試編寫Prolog代碼以確定綁定變量X
是否位於列表中綁定變量Y
的範圍內。如果X
和Y
是同一個列表的成員,或者如果X
是列表中的成員,則該列表可能是嵌套的,並且X
在Y
的範圍內,如果X
是列表的成員,該列表是列表的成員...(嵌套無限期地)在與Y
相同的列表中。這裏我將in_scope(X,Y,List)
定義爲X
在最外層列表List
中的Y
的範圍內。我寫了下面的代碼,但是這個代碼導致堆棧溢出:Prolog中的堆棧溢出
in_scope(X,Y,List) :- in(Parent,List), member(X,Parent), member(Y,Parent).
in_scope(X,Y,List) :- in(X,Parent), in_scope(Parent,Y,List).
in(X,Y) :- member(X,Y).
in(X,Y) :- member(X,Z), in(Z,Y).
我希望能夠幫助您修改代碼以避免堆棧溢出。
謝謝!並且'in_sublist(X,Sub)'應該在(X,Sub)'中? – sentinel 2010-10-24 22:04:04
是的,道歉。我重新命名了謂詞,然後重新命名了它。 – 2010-10-24 22:05:21
不客氣。我在'in/2'謂詞中至少發現了一個錯誤。將變量名稱更改爲可理解的內容幫助了很多:) – 2010-10-25 10:59:50