一句我有一個列表L創建爲:搜索在序言
atomic_list_concat(L,' ', 'This is a string').
L = ['This',is,a,string]
現在我想使用成員函數來搜索一個原子升。 我想:
?- member(' is',L).
L = [' is'|_G268] .
?- member(is,L).
L = [is|_G268] .
它是什麼,我做錯了什麼?
一句我有一個列表L創建爲:搜索在序言
atomic_list_concat(L,' ', 'This is a string').
L = ['This',is,a,string]
現在我想使用成員函數來搜索一個原子升。 我想:
?- member(' is',L).
L = [' is'|_G268] .
?- member(is,L).
L = [is|_G268] .
它是什麼,我做錯了什麼?
儘管dasblinkenlight發佈的解決方案是正確的,但它在某種程度上破壞了使用Prolog頂層的交互性。通常,您希望將您的下一個查詢基於以前的解決方案。
由於這個原因,有可能通過編寫reuse top-level bindings$Var
其中Var
是在先前的查詢中使用的變量的名稱。
你的情況:
?- atomic_list_concat(L, ' ', 'This is a string').
L = ['This', is, a, string].
?- member(' is', $L).
false.
?- member('is', $L).
true ;
false.
PS:請注意,搜索' is'
時,因爲分離是由atomic_list_concat/3
刪除你不會得到一個結果。
交互式運行的Prolog謂詞不包含狀態。當您運行
atomic_list_concat(L,' ', 'This is a string').
解釋說明你L
賦值,然後忘記它的價值。當您在下一行運行member/2
時,L
將回到其自由變量狀態。
如果你想在同一L
結轉,你需要保持同樣的請求中,像這樣:
:- atomic_list_concat(L,' ', 'This is a string'),
member(is, L),
writeln('membership is confirmed').
現在從atomic_list_concat
L
任務是提供給member/2
,讓它檢查會員。
謝謝!它有幫助。 – na899 2014-12-02 18:52:37
哦!再次感謝,我是prolog和stackoverflow的新手。所以任何提示都很有用。 我有另一個問題,但我相信我不能給特定用戶標記答案。我可以嗎? – na899 2014-12-02 20:05:55
我已經發布了另一個與序言相關的問題。 http://stackoverflow.com/questions/27258188/prolog-eliminating-cycles-from-indirect-relation 請看看。 – na899 2014-12-02 20:23:22