我正在寻找解决方案。
用户可以使用my_predicate(X)
或my_predicate(item)
。
我想实现两者都给出不同的输出。
所以我必须检查它是X
还是item
。
我知道可以通过以下方式检查该项:atom(item)
但是我如何查看X
。
鲁洛夫
编辑1。 奇怪的, 在SWI-Prolog网站上,他们说这不起作用。
my_predicate(X) :-
var(X) ,
write("here a name is typed in").
my_predicate(X) :-
nonvar(X) ,
write("here the X is typed in").
答案 0 :(得分:1)
var / 1它是Prolog中最简单的元编程工具,因为它允许根据诸如条款实例化这样的基本属性来改变程序行为。变量
我有时会使用这个构造
some_applicative_code(X) :-
( nonvar(X) ; X = some_default_value ),
...
为参数提供一种默认值,通常用于测试目的。
调用?- some_applicative_code(_).
X将绑定到some_default_value
。
从您编辑的帖子中,您似乎正在颠倒逻辑。我希望
my_predicate(X) :- nonvar(X) , write("here a name is typed in").
my_predicate(X) :- var(X) , write("here the X is typed in").
编辑这是一个测试
1 ?- my_predicate(_).
here the X is typed in
true.
2 ?- my_predicate(carlo).
here a name is typed in
true .