簡體   English   中英

解決Prolog中的邏輯難題

[英]Solving a Logic Puzzle in Prolog

我正在學習Prolog,但是遇到了這個問題,我真的不知道該如何完成。 我以為我的代碼正確,但是我在Sictus中不斷收到警告,而且我不知道我的錯誤在哪里。

這是問題所在:

/*
    File:       fall_dance_competition.pl
    Purpose:    Solve the Fall "Dance Competition" puzzle

    Notes:
    Saturday night, four couples went to the town’s annual fall dance 
    competition. Each couple dressed in matching colors and they all
    performed very well. The competition was fierce but friendly and
    everyone had a grand time. Determine the name of each couple, 
    their place in the competition, and the color each couple wore.

    1. Tom, who wasn’t married to Jean, placed better than Mary 
       and her husband but worse than the West couple did.
    2. The couple wearing brown won the event. Mr. and Mrs. 
       King came in 4th place.
    3. Bill Snow and his wife didn’t wear the green outfits. 
       Jean wasn’t married to John.
    4. The couple wearing blue placed after the couple wearing red 
       but before the King couple.
    5. From 4th place to 1st place, the couples won in the following 
       order: John and his wife, the
       couple wearing blue, Mr. and Mrs. Forest, Brenda and her husband.
    6. George and his wife placed better than Tom and Sara.
*/

這是我的代碼:

use_module( library(basics)).use_module(library(lists)).

lista([pareja(_,_,_,_,_),pareja(_,_,_,_,_),
       pareja(_,_,_,_,_),pareja(_,_,_,_,_)]).

constraints( S ) :-      
    member(pareja(tom, _, _, _, _), S)
    member(pareja(_, jean, _, _, _), S)
    member(pareja(_, mary, _, _, _), S)
    member(pareja(_, _, west, _, _), S)
    perm2(Left_1, Right_1, pareja(tom, _, _, _, _), pareja(_, mary, _, _, _))
    nextto(Left_1, Right_1, S)
    perm2(Left_2, Right_2, pareja(_, _, west, _, _), pareja(tom, _, _, _, _))
    nextto(Left_2, Right_2, S)
    S = [pareja(_, _, _, 1, brown), _, _, _]
    S = [_, _, _, pareja(_, _, king, 4, _)]
    member(pareja(bill, _, snow, _, _), S)
    member(pareja(_, _, _, _, green), S)
    member(pareja(john, _, _, _, _), S)
    nextto(pareja(_, _, _, _, red), pareja(_, _, _, _, blue), S)
    nextto(pareja(_, _, _, _, blue), pareja(_, _, king, _, _), S)
    S = [_, _, _, pareja(john, _, _, 4, _)]
    S = [_, _, pareja(_, _, _, 3, blue), _]
    S = [_, pareja(_, _, forest, 2, _), _, _]
    S = [pareja(_, brenda, _, 1, _), _, _, _]   
    member(pareja(george, _, _, _, _), S)
    member(pareja(tom, sara, _, _, _), S)
    nextto(pareja(george, _, _, _, _), pareja(tom, sara, _, _, _), S).

green( Who ) :-
    lista(S),
    constraints(S),
    member(pareja(_, Who, _, _, green), S). 

nextto(X, Y, List) :- append(_, [X,Y|_], List).

append([X|Y],Z,[X|W]) :- append(Y,Z,W).  
append([],X,X).

member(X,[X|T]).
member(X,[H|T]) :- member(X,T).

perm2(X,Y, X,Y).
perm2(X,Y, Y,X).

我用斑馬拼圖的一些例子來做。

將程序的第一行更改為:

:- use_module(library(basics)).
:- use_module(library(lists)).

檢查是否可以解決問題。 use_module/1是指令,必須這樣編寫。

您在constrains/1謂詞的末尾以某種方式錯過了許多逗號。 嘗試運行文件時,這將產生很多錯誤。

應該是這樣的:

constraints( S ) :-      
    member(pareja(tom, _, _, _, _), S),
    member(pareja(_, jean, _, _, _), S),
    member(pareja(_, mary, _, _, _), S),
    member(pareja(_, _, west, _, _), S),
    perm2(Left_1, Right_1, pareja(tom, _, _, _, _), pareja(_, mary, _, _, _)),
    nextto(Left_1, Right_1, S),
    perm2(Left_2, Right_2, pareja(_, _, west, _, _), pareja(tom, _, _, _, _)),
    nextto(Left_2, Right_2, S),
    S = [pareja(_, _, _, 1, brown), _, _, _],
    S = [_, _, _, pareja(_, _, king, 4, _)],
    member(pareja(bill, _, snow, _, _), S),
    member(pareja(_, _, _, _, green), S),
    member(pareja(john, _, _, _, _), S),
    nextto(pareja(_, _, _, _, red), pareja(_, _, _, _, blue), S),
    nextto(pareja(_, _, _, _, blue), pareja(_, _, king, _, _), S),
    S = [_, _, _, pareja(john, _, _, 4, _)],
    S = [_, _, pareja(_, _, _, 3, blue), _],
    S = [_, pareja(_, _, forest, 2, _), _, _],
    S = [pareja(_, brenda, _, 1, _), _, _, _],  
    member(pareja(george, _, _, _, _), S),
    member(pareja(tom, sara, _, _, _), S),
    nextto(pareja(george, _, _, _, _), pareja(tom, sara, _, _, _), S).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM