【问题标题】:Prolog Return True if no uninstantiated variables如果没有未实例化的变量,Prolog 返回 True
【发布时间】:2011-10-22 09:10:13
【问题描述】:

如果 Term 没有任何未实例化的变量,我需要帮助编写一个返回 true 的谓词 ground(Term)。

我知道我需要使用内置谓词函子、arg 和 '=..' 但我想我需要帮助才能开始...

我的想法是,我需要把 Term 往下走(Term 可以是多个变量的列表)。检查头部,然后递归查看列表的其余部分并检查列表的其余部分是否未实例化。

但我的问题是......我如何检查它是否未实例化?

【问题讨论】:

  • 我不想提这是kind of a duplicate of the question you asked 10 minutes ago。您还应该学习将homework 标签添加到...家庭作业的问题。另一方面,这次对这个问题的明显努力表示赞赏。
  • 对不起,我下次会在标签中添加作业
  • 另外,does this help you in any way?我对 prolog 的了解几乎和我对海底资源开采的细节的了解一样多(== 没有),但这听起来对我来说是一个非常相似的问题。

标签: prolog


【解决方案1】:

您可以使用var/1 谓词来测试一个术语是否是一个未实例化的变量。

?- var(X).
true.

?- var(x).
false.

?- var((X,Y)).
false.

?- var(t(Y,Z)).
false.

【讨论】:

  • 我刚刚也发现了!好的,所以我越来越近了。这就是我到目前为止所拥有的:ground([])。地面(期限):-期限=..L。变量(L)。那有什么问题?我有两个测试要做:ground(t(a,b,c,)) 和 ground(t(a,X,c))。第一个工作正常。第二个说它也是正确的,这不是因为 X 没有实例化。
  • var 适用于单个变量。你不能像这样在=.. 的结果上使用它。您必须测试列表中的每个成员,并以递归方式执行此操作(这样它也适用于 t(t(X)) 之类的东西)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多