gpt4 book ai didi

prolog - go/0 未定义的过程 save/1

转载 作者:行者123 更新时间:2023-12-02 06:07:15 27 4
gpt4 key购买 nike

swi-prolog 5.10.2

我已经输入了这个 prolog 程序。但是,当我运行选项 a 时,出现以下错误。

go/0 Undefined Procedure save/1

我确信 save 是一个正确的关键字谓词,并且文件的路径也确实存在。不知道我哪里错了。

What does the /0 /1 mean in go and save?

源代码

/* Shopping list */

go:-reconsult('~/projects/prolog/chap7/shopping.pl'),
write('a: See list'), nl,
write('b: Add to list'), nl,
write('c: Delete from list'), nl,
read(Choice),
choice(Choice),
save('~/projects/prolog/chap7/shopping.pl').

/*
facts for shopping
*/
item(potatoes).
item(bread).
item(coffee).

/*
Rules for shopping list
*/
choice(a):-listing(item), nl.
choice(b):-write('Enter an item: '),
read(Item),
assert(item(Item)).
choice(c):-write('Item to delete: '),
read(Item),
retract(item(Item)).
choice(_):-write('Incorrect entry.'), nl.

非常感谢,

最佳答案

错误消息指出,您定义的谓词 go/0 使用了系统无法识别的谓词 save/1,并将其标记为未定义过程。谓词通常由 谓词指示符 标识,格式为 name/arity,其中 name 是谓词的名称,表示为一个原子,arity 是一个数字,表示如何谓词已被定义为接受许多参数:因此,例如,go/0 是谓词 go 的标识符,没有参数,在您的程序中定义;而 save/1 是谓词 save 的标识符,带有一个参数,您正试图调用但系统无法找到该谓词。当通过两个或多个重载版本定义谓词时,例如每个定义都有不同的元数,可以通过将每个元数括在括号之间并用逗号分隔来引用它,例如p/[1,2]。谓词有时也称为过程,这两个术语大致等同。

可以在 older SWI-Prolog manuals 中看到(链接指的是 2.9 版) save/1 确实曾经在标准库中定义,并且通常在这些系统上可用。即使在那些旧系统中,也有人建议使用 save_program/[1,2] 来创建一个新程序,而不是 save/1,据说后者会被利用仅用于调试目的。然而,在现代 SWI-Prolog 系统中,save/1save_program/[1,2] 都不可用。虽然似乎没有 save/1 的等效谓词,但 save_program/[1,2] 的角色已被 qsave_program/[1, 2],你可以阅读 in the latest version of the manual .请务必阅读有关 its limitations 的内容,以防万一您希望将程序扩展到您在此处发布的简单片段之外。

我从未使用过那种程序,因此我必须假定您知道自己在做什么。但是,注意到程序开始时的 reconsult/1 调用使用了稍后由 save/1 保存的相同文件,我恳请您意识到两者之间存在差异在文本文件中的一堆 Prolog 谓词之间,即 reconsult/1 可以读取和理解的格式,以及至少 qsave_program 的半文本半二进制格式(但我也维护 savesave_program)用于将程序写入磁盘。因为,通过阅读您的代码,您似乎可能对存储购物 list 的项目感兴趣,所以我想补充一点,您可以通过使用 listing 的组合将感兴趣的谓词保存在纯文本文件中/1I/O procedures比如open/3set_output/1current_output/1等。

关于prolog - go/0 未定义的过程 save/1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com