-1

我需要使用 SWI-prolog 来解决家庭作业的逻辑难题,但即使有我的编程背景,我也发现语法和含义非常麻烦。我面临的问题是关于单例变量的错误,并且拼图返回错误。

这是我到目前为止所做的:

:- use_module(library(clpfd)).

sends(K,priscilla,C),
    C#\=rose.
sends(carol,L,rose).
sends(dick,L,sun).

sends(K,L,landscape).
sends(bob,rhonda,C).
sends(edna,quincy,C).

sends(K,simon,deer).
sends(K,tina,C).

solve :-
    sends(
        [alice,bob,carol,dick,edna],
        [priscilla,rhonda,quincy,simon,tina],
        [rose,heart,sun,landscape,deer]).

这就是问题,向正确方向轻推或帮助我更好地理解语言的答案将不胜感激! 问题

4

1 回答 1

2

只要有一个单一的使用变量,就会出现单例错误。这似乎是你唯一使用变量的地方,所以我希望你能得到很多。您上面的代码相当于:

sends(_,priscilla,C),
    C#\=rose.
sends(carol,_,rose).
sends(dick,_,sun).

sends(_,_,landscape).
sends(bob,rhonda,_).
sends(edna,quincy,_).

sends(_,simon,deer).
sends(_,tina,_).

如果用 替换单例变量看起来很奇怪或有问题_,那么这是一个很好的指标,表明您缺少逻辑。请注意,sends/3您所写的参数似乎完全是原子的,这使得这个调用特别奇怪:

sends(
    [alice,bob,carol,dick,edna],
    [priscilla,rhonda,quincy,simon,tina],
    [rose,heart,sun,landscape,deer]).

没有理由期望 Prolog 会神奇地将这种对sends/3列表的使用转换为其他对原子的调用。我不知道你期望在这里发生什么。

这些类型的谜题是 Prolog 非常流行的分配问题。在这里搜索档案——最近几天就有几个——你应该会找到一些灵感。

于 2013-05-07T15:02:28.483 回答