一句我有一个列表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