Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

Help!求大神帮我用prolog编下题目呗,不胜感激...

2 posters

向下  留言 [第1页/共1页]

溪中水life



请用prolog编写:
有人邀请A,B,C,D,E,F6个人参加一项会议。已知:
1. A,B两人至少有1人参加会议。
2. A,E,F3人中有2人参加会议。
3. B和C两人决定,要么两人都去,要么两人都不去。
4. A,D两人中只1人参加会议。
5. C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。
那么最后究竟有哪几个人参加了会议呢?

Mercury Liao


Admin

溪中水life 写道:请用prolog编写:
有人邀请A,B,C,D,E,F6个人参加一项会议。已知:
1. A,B两人至少有1人参加会议。
2. A,E,F3人中有2人参加会议。
3. B和C两人决定,要么两人都去,要么两人都不去。
4. A,D两人中只1人参加会议。
5. C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。
那么最后究竟有哪几个人参加了会议呢?

代码:
condition1(S) :- nth1(1, S, 1); nth1(2, S, 1).
condition2(S) :- S = [A, _, _, _, E, F], 2 is A + E + F.
condition3(S) :- S = [_, B, C, _, _, _], B = C.
condition4(S) :- S = [A, _, _, D, _, _], 1 is A + D.
condition5(S) :- S = [_, _, C, D, _, _], 1 is C + D.
condition6(S) :- S = [_, _, _, D, E, _], (D = 0 -> E = 0 ; true).


conference(S) :- length(S, 6), maplist(attend_or_not, S),
                condition1(S), condition2(S), condition3(S),
                condition4(S), condition5(S), condition6(S).


attend_or_not(Z) :- Z = 0; Z = 1.

33 ?- conference(S).
S = [1, 1, 1, 0, 0, 1] ;
S = [1, 1, 1, 0, 0, 1] ;
false.


只有一组解:A、B、C、F参加会议,D、E不参加。

http://prolog.longluntan.net

返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题