Wil*_*sem 5 list prolog unification prolog-dif
在Prolog中,如果你这样写:
delete([(1,1),(1,2),(1,1),(3,4)],(1,_),L).
Run Code Online (Sandbox Code Playgroud)
结果将是:
L = [ (1, 2), (3, 4)].
Run Code Online (Sandbox Code Playgroud)
什么是正常的,因为_变量在第一个元素中与1绑定,它搜索(1,1)的其他元素并删除它们.
有没有办法阻止这种统一发生并删除表格的所有成员(1,_).在这种情况下,结果必须是:L = [(3,4)].
delete_pattern([], _, []).
delete_pattern([H|T], P, O) :-
( H \= P
-> O = [H|O1],
delete_pattern(T, P, O1)
; delete_pattern(T, P, O) ).
Run Code Online (Sandbox Code Playgroud)
您可能希望使用其他谓词进行过滤,这会导致语义略有不同,如==/2or =@=/2。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |