如何解决序言问题! “单身”!
| 我有一个序言作业,应该像这样工作: singles([1,2,3,4,1],[3,4]).
true
现在我已经确定我应该测试列表中是否有一个元素是单个元素,然后将所有单个元素放在一起..然后我写下了:
singles(L,SL):-findall(X,isSingle(X,L),SL).
isSingle(X,L):-member(X,append(Y,[X|Z],not(member(X,L1)),Z,L1).
在isSingle
函数中,X
应该在列表L
中,而不是在没有X
的新列表L1
中,就像1
在[2,1,3]
中而不是在[2,3]
中一样,但是不幸的是,整个事情并没有像我想的那样:(
我认为问题出在isSingle
部分,有人可以帮助我吗?
解决方法
切换
not(member(X,L1))
和ѭ12order的顺序,您的代码将起作用。我不是Prolog专家,所以我对此并不完全确定,但是,通过跟踪,似乎与使用not
的微妙之处有关。您必须先在L1
上对member
求值,然后再将其统一到append(Y,Z,L1)
位。
,
singles(List,SelectList) :-
singles(List,List,SelectList).
singles([],[]).
singles([A|R1],[A|R2]) :-
unique(A,List),singles(R1,R2).
singles([A|R1],R2) :-
\\+(unique(A,List)),R2).
unique(A,List) :-
append(L0,[A|R],\\+(append(_,[A|_],L0)),R)).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。