库(lambda),currying和SWI Prolog

时间:2018-03-26 22:36:41

标签: prolog swi-prolog

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

我做了一个" use_module(library(lambda))。" 在文件的第一行 我通过[" a.prolog"]咨询。 然后我得到一个"未定义的程序()/ 3" 然后是一些胡言乱语。

任何use_modules顺序都会发生同样的情况。 无论我是通过加载a.prolog,都会发生这种情况 [...],咨询或作为cmdline的脚本。 我将脚本缩减为Rosseta代码中的currying示例 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-prompt和immeditately咨询 a.prolog。然后目标N = 5,....工作得很好。

但是,如果我先咨询a.prolog;然后手动 use_module然后运行查询,我得到错误。 重建没有任何帮助。

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

或者我的加载机制是否完全错误? 如果是的话,请道歉;但我很想得到一个 提示如何解决这个问题。

1 个答案:

答案 0 :(得分:4)

首次使用模块时,这是一个常见错误。

请看一下这一行:

use_module(library(lambda)).

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

您想要的是指令

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

:- use_module(library(lambda)).

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

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

Hiord”代表更高级别