【问题标题】:Problems with library(lambda), currying and SWI Prologlibrary(lambda)、currying 和 SWI Prolog 的问题
【发布时间】:2018-09-05 04:53:30
【问题描述】:

所以我在(ab?)使用时遇到了一些麻烦 lambda.pl.

我做了一个“use_module(library(lambda))”。 在文件的第一行中 我通过 ["a.prolog"] 进行咨询。 然后我得到一个“未定义的过程()/ 3” 之后还有一些乱七八糟的东西。

use_modules 的任何顺序都会发生同样的情况。 我是否通过加载 a.prolog 会发生这种情况 [...],咨询或作为 cmdline 中的脚本。 我将脚本简化为罗塞塔代码中的柯里化示例 https://rosettacode.org/wiki/Currying#Prolog

use_module(library(lambda)).

:- initialization(main, main).

main :-
    N = 5, F = \X^Y^(Y is X+N), maplist(F, [1,2,3], L),
    print(L).

它不起作用。

但是,如果我手动加载“lambda”,它可以工作 在 swipl 提示和立即咨询 a.序言。然后目标 N=5,.... 就可以了。

但是,如果我先咨询 a.prolog;然后手动 use_module 然后运行查询,我得到了错误。 重新咨询无济于事。

不知何故,提示符处的第一个命令需要 是use_module。

还是我完全弄错了加载机制? 如果是这样,请道歉;但我很想得到一个 提示如何解决这个问题。

【问题讨论】:

  • 次要评论:宁可使用F_2 代替F。通过这种方式,您可以清楚地表明 F_2 是一个不完整的目标,需要两个进一步的参数。

标签: prolog swi-prolog


【解决方案1】:

这是第一次使用模块时的常见错误。

请看看这一行:

使用模块(库(lambda))。

这只是一个事实,说“use_module(library(lambbda)) 成立”。

您想要的是一个指令

指令是一个带有主函子(:-)/1的术语。也就是说,你想要:

:- 使用模块(库(lambda))。

编辑:对于 library(lambda) 的特殊情况,我想补充一点,有一个页面包含很多有用的信息,但有点难以找到:

http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord

Hiord”代表高阶

【讨论】:

  • 哦...这很尴尬。非常感谢。确实是我的错。
  • 如果有什么安慰的话:这是一个很常见的问题,我也从几个学生那里看到过,有时是因为他们的导师的幻灯片也有这个错误!
  • 你基本上没有让我展示这样的幻灯片;-)
  • 不错!我认为您将学生介绍给library(lambda) 真是太好了。请注意homepage:它还包含一个算术示例——在我看来——甚至更好,因为它更通用,使用声明性整数算术!我希望你觉得它有用。
  • 确实应该像 SICStus Prolog 那样出现权限错误。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
相关资源
最近更新 更多