在X和原子上产生差异

时间:2014-03-24 12:50:42

标签: prolog

我正在寻找解决方案。 用户可以使用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").

1 个答案:

答案 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 .