首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电话会话逻辑难题{Prolog}

电话会话逻辑难题{Prolog}
EN

Stack Overflow用户
提问于 2013-05-02 18:32:45
回答 1查看 571关注 0票数 1
代码语言:javascript
复制
year('1928').
year('1929').
year('1932').
year('1935').

person(gertie).
person(herbert).
person(miriam).
person(wallace).

exchange(al).
exchange(be).
exchange(pe).
exchange(sl).

solve:- year(Y1), year(Y2), year(Y3), year(Y4),
        unique([Y1,Y2,Y3,Y4]),

    exchange(GertEx), exchange(HerbEx), exchange(MirEx), exchange(WallEx),
    unique([GertEx,HerbEx,MirEx,WallEx]),

    Triples= [[gertie,Y1,GertEx],
          [herbert,Y2,HerbEx],
          [miriam,Y3,MirEx],
          [wallace,Y4,WallEx]],
    %herberts first exchange was BE
    \+ member([herbert,be,_],Triples),
    %neither herberts nor gerties first exchange was sl
    \+ (
        member([herbert,sl,_],Triples);
        member([gertie,sl,_],Triples)
        ),
    %the BE exchange wasnt made in 1935
    \+ member([_,be,'1935'],Triples),
    %neither the AL nor the BE exchanges were made in 1932
    \+ (
         member([_,al,'1932'],Triples);
         member([_,be,'1932'],Triples)
       ),
    %the PE exchange was made in 1929
       member([_,pe,'1929'],Triples),
    %wallace's first exchange was AL
       member([wallace,al,_],Triples),

       writer(gertie,Y1,GertEx),
       writer(herbert,Y2,HerbEx),
       writer(miriam,Y3,MirEx),
       writer(wallace,Y4,WallEx).

writer(X,Y,Z):- write(X), write(' made the '), write(Y), write(' exchange in '), write(Z), nl.

unique([H | T]) :- member(H, T), !, fail.
unique([_ | T]) :- unique(T).
unique([_]).

我尝试运行它,但它返回的都是一条错误的语句。我从http://www.cis.upenn.edu/~matuszek/cis554-2012/Assignments/prolog-01-logic-puzzle.html得到了这个问题,根据我所看到的,除了使用的一些原子和一些逻辑involved...anybody之外,它几乎与it-a-tie.pl示例完全相同,知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 18:54:55

似乎有交换的字段。将Triples更改为

代码语言:javascript
复制
Triples= [[gertie,GertEx,Y1],
      [herbert,HerbEx,Y2],
      [miriam,MirEx,Y3],
      [wallace,WallEx,Y4]],

我得到了

代码语言:javascript
复制
?- solve.
gertie made the 1928 exchange in be
herbert made the 1929 exchange in pe
miriam made the 1932 exchange in sl
wallace made the 1935 exchange in al
true .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16335825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档