【发布时间】:2021-03-31 18:03:55
【问题描述】:
所以我在 SWI prolog 中编写了这个谓词,目的是如果它的参数是一个没有 任何原子
no_atoms(X):- var(X), !, fail.
no_atoms(X):- atom(X); number(X).
no_atoms(X+Y):- no_atoms(X), no_atoms(Y).
no_atoms(X-Y):- no_atoms(X), no_atoms(Y).
要测试这个 no_atoms(5-(3+x)) 应该是假的, no_atoms((12+8)-7) 应该是真的,但是两者都是真的,我不确定有什么问题?
【问题讨论】:
-
小写
x是一个原子。大写X是一个可能未绑定的变量。您可以尝试使用未绑定的大写X查询no_atoms(5-(3+X))。 -
谢谢,大写是假的,但是有没有办法在用小写x查询时证明它是假的?
-
您必须检查哪些原子是您的表达式变量,例如单个字母。
var/1是检查参数当前是否为未绑定变量 -
这让我很困惑。什么是“表达”?
X*Y不是“表达”吗?如果atoms+和-不算数,“没有任何原子”是什么意思?