【发布时间】:2021-04-28 17:41:01
【问题描述】:
我通常能够通过 maplist 找出 Lambda 的一些用法,但通常很难在 prolog 中使用 lambda。 可能是因为它与其他语言不同,因为统一。
这是症结之一:如何应用声明的 Lambda 表达式? f.e.
LAM = \X^R^(....)
(奇怪,= 和 \ 之间必须有空格)
你好吗:
\(LAM)(abc,R)
我想做的另一件事是像 FACT 一样存储 Lambda 表达式,以便我可以查询它,但也可以像 lambda 函数一样拥有它,以便以后进行绑定..f.e.就在我的头顶......我可能认为它错了..
move = \Obj^From^To(move(Obj,From,To))
实例化:
?- \(move)(ball,ground,table).
或部分:
?- L2 = \(move)(ball).
?- L3 = \(L2)(table,floor)
查询:
?- move(ball,F,T).
【问题讨论】:
-
请参阅 this 了解应该回答您大部分问题的介绍。
-
red it before ..它只是断开了sn-ps ...没有多大帮助
-
那些 lambda 表达式并不是真正的函数式编程中的 lambda 表达式。特别是你不能用它们来“关闭”(因为 Prolog 没有可以关闭的上下文,因为它没有“局部变量”)。您不能存储它们。它们实际上是围绕需要通过“创建适当的谓词”来调用的目标重写为“无 lambda Prolog”的“垫片”。
-
上面的语法是this package。对于 SWI-Prolog 和 Logtalk,有另一种语法 yall。也许它更清楚?我花了一些时间才得到它。
-
@DavidTonhofer:请注意,您引用的替代方案没有键入。所以类型检查器(如 SWI 中的那个)不能与它一起使用。
标签: lambda prolog meta-predicate