检查谓词 [英] Check predicate
本文介绍了检查谓词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有问题.我有 5 个常量.
I've a problem. I have 5 constants.
C(1).
C(2).
C(3).
C(4).
C(5).
我有一个名为check"的谓词,它接收两个参数.
And I've a predicate named "check" that receives two arguments.
示例:
check( [C(1), C(3), C(4), _, C(5)], ListFinal).
现在它应该给我
ListFinal = [C(1), C(3), C(4), C(2), C(5)].
我该怎么做?如何检查那个黑色空间放在那里,我没有使用过的常量?可以更改常量的实现.
How do I do this? How to check for that black space to put there, the constant I haven't used? It is possible to change the implementation of the constants.
推荐答案
check(L, C) :-
check(L, [], C).
check([], _, []).
check([c(X)|T], A, [c(X)|C]) :-
c(X),
\+ memberchk(c(X), A),
check(T, [c(X)|A], C).
一些测试:
| ?- check([_, c(3), c(4), _, c(5)], ListFinal).
ListFinal = [c(1),c(3),c(4),c(2),c(5)] ? a
ListFinal = [c(2),c(3),c(4),c(1),c(5)]
no
| ?- check([c(1), c(3), c(4), _, c(5)], ListFinal).
ListFinal = [c(1),c(3),c(4),c(2),c(5)] ? a
no
| ?-
这是 DCG 方法:
Here's a DCG approach:
remap([c(X)|T], A) --> {c(X), \+ memberchk(c(X), A)}, [c(X)], remap(T, [c(X)|A]).
remap([], _) --> [].
check(L, C) :- phrase(remap(L, []), C).
这篇关于检查谓词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文