我在使用SWI-Prolog中的round/1
和floor/1
内置插件时遇到问题。在我的代码中使用它们时,它们无法识别,并在提交它们作为查询时;例如?- round(1.6).
,Prolog会告诉我该程序不被识别。难道我做错了什么?我在线上Swish版本和我自己的Windows安装版本上都试过了,但是在两者上都得到相同的错误。为什么Prolog不能识别这些内置函数?
1
A
回答
1
round/1
和floor/1
没有内置谓词,round/2
和floor/2
是。
Prolog使用谓词。这意味着谓词只能是true
或false
(或错误)。此外,它可以统一变量(更多)。
因此,计算floor
为1.6的唯一方法是使用两个变量,并使第二个变量位于第一个变量的底部。例如:
?- round(1.6,X).
X = 2.
?- floor(1.6,X).
X = 1.
因为用这种方式编写谓词有时很麻烦。 Prolog定义了一些函子,这些函数可以用is/2
谓词解释。 round/1
和floor/1
是仿函数与在is/2
谓词语义:
?- X is round(1.6).
X = 2.
?- X is floor(1.6).
X = 1.
is
可以用更高级的表达式树工作,以及像:
?- X is floor(0.4+0.4+0.4).
X = 1.
但是请注意,is
实际上是谓也。我们已经写:
is(X, floor(0.4+0.4+0.4)).
窗帘后面,is/2
断言将调用floor/2
。但是请注意,你不能简单地通过这种方式注入自己的谓词。您不能简单地写is(X, foo(2))
并期望Prolog拨打foo(2.X)
。
相关问题
- 1. 为什么prolog不能识别查询中的参数?
- 2. 为什么Xcode不能识别这些着色器?
- 3. Bukkit API为什么不能识别这些块
- 4. Swift HTTP Post:为什么这些参数不被识别?
- 5. 为什么这个WCF服务不能识别UriTemplate参数?
- 6. 为什么Drupal不能识别我的javascript函数?
- 7. 为什么这些<form>不被FF和Chrome识别?
- 8. 为什么朋友成员函数不能自动识别为函数模板?
- 9. 这些功能函数叫什么?
- 10. 为什么Xcode不能识别PFFVideosUtils?
- 11. 为什么Eclipse不能识别$ PERL5LIB?
- 12. 为什么delphi不能识别对象?
- 13. 为什么eclipse不能识别webdriver.gecko.driver
- 14. 为什么程序不能识别pygame?
- 15. 为什么不能scala识别com.vaadin.ui.MenuBar.MenuItem
- 16. 为什么Xcode不能识别余弦?
- 17. 为什么indexOf()不能识别空格?
- 18. 为什么kubernetes v1.5不能识别service.spec.loadBalancerIp?
- 19. 为什么我不能连接这些JS函数?
- 20. 为什么这些函数不能看到我的变量?
- 21. 为什么eclipse不能识别一些javadocs标签?
- 22. 为什么LINQ to Entities不能识别某些方法?
- 23. 为什么java的URL类不能识别某些协议?
- 24. 为什么这个jQuery函数无法识别?
- 25. 为什么不能识别这个正则表达式?
- 26. 为什么这个挂钩语法不能识别42?
- 27. 为什么不能识别这个实例变量?
- 28. 为什么JavaScript不能识别PHP的这个输出?
- 29. 这个switch语句为什么不能识别subString?
- 30. 为什么这段代码不能识别NSString是否相等?
*由于以这种方式编写谓词有时很麻烦,您也可以将它写为:... *我会在这里小心。你可能会留下这样的印象:表达式的任何谓词'functor(...,X)'也可以表示为'X是函数(...)',这显然不是普遍适用的。它表明任何谓词都有一个功能形式。对于所有的算术函数也并非总是如此。例如,你可以写'X is min(2,3).'并得到'X = 2'。但'min(2,3,X)'失败,因为'min/3'不存在。 – lurker
@lurker:已更新。更好? –
我认为* functor *的定义太具体。对于带有参数的形式“foo(...)”的术语,“foo”被称为* functor *。它不是特定于算术函数。我可能会说Prolog中的某些内置谓词是*算术函数*,因此可以与'is/2'以及其他算术运算符(*例如*,'>/2')一起使用。我不确定我会说替代形式是因为另一种形式是“繁琐的”(它们都是大致相同的打字量)。他们只是替代品。一个被明确用作算术函数。其他不是。 – lurker