【发布时间】:2013-08-27 12:24:40
【问题描述】:
我知道 Prolog(逻辑编程)都是关于返回 true 和 false,并且函数是返回从列表到数字到布尔值的任何东西的东西。最初,Prolog 似乎没有函数的概念,而是依赖于统一,但是您可以执行以下操作:
?- X is log(42).
X = 3.7376696182833684.
所以似乎存在功能?或者这真的只是某种隐藏统一部分的语法糖?
如果它真的只是语法糖,那么如果我想定义一个像 log2 这样的数学“函数”,我该怎么做?
我当然可以使用统一:
log2(X,Result) :- Result is log(X)/log(2).
但是假设我想使用“语法糖函数样式”,所以我可以写:
?- X is log2(8).
X = 3.0.
如何在 Prolog 中做到这一点?
【问题讨论】:
-
有一个已弃用的指令
arithmetic_function可以满足您的需求。假设您的log2/2谓词存在,指令:- arithmetic_function(log2/1).将使您的第二个示例工作。我不确定为什么不推荐使用它,但它似乎在 6.2.6 中仍然有效。 -
我也想知道这种弃用,想问问 Jan W.。丹尼斯 M. 喜欢与 Amzi 一起使用的方法! Prolog 将定义“is”的替代方案(例如
iz/2使用中缀语法)并构造规则来评估所需的任何附加功能。
标签: prolog operators user-defined-functions