Prolog 使X和原子发生变化

Prolog 使X和原子发生变化,prolog,Prolog,我正在寻找解决办法。 用户可以使用my\u谓词(X)或my\u谓词(项) 我想实现的是,两者都有不同的输出。 因此,我必须检查它是X还是项 我知道项目可以通过以下方式进行检查:atom(项目) 但是我如何检查X 罗洛夫 编辑1。 奇怪的 在SWI Prolog网站上,他们说这行不通 my_predicate(X) :- var(X) , write("here a name is typed in"). my_predicate(X) :- nonvar(X) ,

我正在寻找解决办法。 用户可以使用
my\u谓词(X)
my\u谓词(项)

我想实现的是,两者都有不同的输出。 因此,我必须检查它是
X
还是

我知道项目可以通过以下方式进行检查:
atom(项目)
但是我如何检查
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").

var/1它是Prolog中可用的最简单的元编程工具,因为它允许根据子句变量的实例化等基本属性更改程序行为

我有时会用这个结构

some_applicative_code(X) :-
  ( nonvar(X) ; X = some_default_value ),
  ...
为参数设置一种默认值,通常用于测试目的

调用
?-一些应用程序代码(。
X将绑定到
一些默认值

从你编辑的帖子中,你似乎在颠倒逻辑。我希望

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 .

swi prolog的人在他们的邮件列表上说我的想法行不通。我需要使用atom(x)。@user3426797:是的,如果你想确定它是atom。。。也许我不明白这个问题…问题还是一样的。如果用户输入my_谓词(X),则必须显示另一个文本,如果用户输入my_谓词(项)。您能否提供指向SWI网站上讨论此问题的页面的链接?