【问题标题】:Operations on lists in PrologProlog中列表的操作
【发布时间】:2026-02-05 17:25:01
【问题描述】:

我是 Prolog 的新手,我想要实现的是对保存在我的程序中的两个列表执行 append/3 之类的操作。我不需要打开 swi-prolog 并输入 append([a,b,c],[h,j,k],X). 即可获得 X=[a,b,c,h,j,k]。我需要的是从程序中检索两个列表并对其执行附加操作。 我什至不知道我想获得的东西是否可以在 Prolog 中获得。

这是我的情况:我得到了这个“esempio.pl”文件,其中包含以下规则和这两个事实:

personal_union(F,C,Xs) :- 
   personal_list(F,Fs),personal_list(C,Cs),append(Fs,Cs,Xs).
personal_list(family,[alessandro,cinzia,fabio]).
personal_list(colors,[blu,giallo,lilla,verde,rosso]).

我想向 SWI-prolog 中的“esempio.pl”提问并问它:

personal_union(family,colors,X).

并获取统一列表:

X=[alessandro,cinzia,fabio,blu,giallo,lilla,verde,rosso]`

我的代码是一个可能的解决方案吗?我自己无法尝试,因为它一直给我这个错误:语法错误:术语的非法开始说明错误出现在我的规则正文的开头。

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    您的代码是有效的,因为我在 Swish 上对其进行了测试,并且它产生了请求的结果。

    您得到的错误通常是由语法错误引起的,例如额外的逗号或括号问题。检查其余的代码。此外,您可能会发现 http://swish.swi-prolog.org/ 适合此类调试。

    【讨论】:

    • 仅供参考,尽管有错误通知,我还是对程序提出了质疑,我得到了我想要的东西。谢谢!
    • @AlessandroSassi 仍然不清楚你得到了什么错误以及为什么。
    • 我认为注意到的错误与我文件中的其他内容有关。我删除了除了讨论中的代码之外的所有内容,并且没有报告任何其他错误。