Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

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


您没有登录。 请登录注册

请高手解决一个逻辑问题

浏览上一个主题 浏览下一个主题 向下  留言 [第1页/共1页]

1 请高手解决一个逻辑问题 于 周一 六月 11, 2012 5:39 am

问题是这样的,很简单,我自己编的。
1,a认为b说假话
2,b认为c说假话
3,c认为a说真话
4,只有一个人说真话
请问谁说真话?

需要用prolog来演算,打印问题答案,请问该如何简单实现?
如果是有两个人说真话,那又是怎么写?
如果是三个人都撒谎,那又该怎样编写代码? 2012.06.11 于江苏无锡

查阅用户资料

2 回复: 请高手解决一个逻辑问题 于 周一 六月 11, 2012 10:55 am

产生并测试的方法,先把变量所有可能的值得组合枚举出来,再逐一检验。
代码:

is_true(a, 1).
is_true(a, 0).
is_true(b, 1).
is_true(b, 0).
is_true(c, 1).
is_true(c, 0).

% X=1则a说的是真话 X=0则a说的是假话,b、c依此类推
solve(X, Y, Z) :- is_true(a, X), is_true(b, Y),
X \= Y,
is_true(c, Z),
Y \= Z,
X = Z,
X + Y + Z =:= 1.

查阅用户资料

3 回复: 请高手解决一个逻辑问题 于 周二 六月 12, 2012 12:37 am

那如何打印答案,也就是执行某个指令后,显示“说真话的人是:" ,然后打印答案。请赐教!

查阅用户资料

4 回复: 请高手解决一个逻辑问题 于 周二 六月 12, 2012 2:25 am

oliver_qq 写道::那如何打印答案,也就是执行某个指令后,显示“说真话的人是:" ,然后打印答案。请赐教!
代码:

is_true(a, 1).
is_true(a, 0).
is_true(b, 1).
is_true(b, 0).
is_true(c, 1).
is_true(c, 0).

write_if_1(Who, 1) :- write(Who), nl.
write_if_1(_, 0).

% X=1则a说的是真话 X=0则a说的是假话,b、c依此类推
solve(X, Y, Z) :- is_true(a, X), is_true(b, Y),
X \= Y,
is_true(c, Z),
Y \= Z,
X = Z,
X + Y + Z =:= 1,
write('说真话的人是:'), nl,
write_if_1(a, X),
write_if_1(b, Y),
write_if_1(c, Z).

查阅用户资料

5 回复: 请高手解决一个逻辑问题 于 周二 六月 12, 2012 9:49 am

我把代码输入 SWI-Prolog version 6.0.0 中,运行后显示如下:(不知为何?没有出现提示的中文,以及X=1,Y=1,Z=0还会出现
?如何不用再输入分号,让程序自动执行完毕)
% c:/Documents and Settings/Oliver/My Documents/Prolog/WDX01谁说真话.pl compiled 0.00 sec, 11 clauses
1 ?- solve(X,Y,Z).

b
X = 0,
Y = 1,
Z = 0 ;
false.

2 ?-

查阅用户资料

6 回复: 请高手解决一个逻辑问题 于 周二 六月 12, 2012 10:40 am

oliver_qq 写道::我把代码输入 SWI-Prolog version 6.0.0 中,运行后显示如下:(不知为何?没有出现提示的中文,以及X=1,Y=1,Z=0还会出现
?如何不用再输入分号,让程序自动执行完毕)
% c:/Documents and Settings/Oliver/My Documents/Prolog/WDX01谁说真话.pl compiled 0.00 sec, 11 clauses
1 ?- solve(X,Y,Z).

b
X = 0,
Y = 1,
Z = 0 ;
false.

2 ?-

SWI-Prolog好像不支持中文吧?

查阅用户资料 http://prolog.longluntan.net

7 回复: 请高手解决一个逻辑问题 于 周二 六月 12, 2012 4:56 pm

SWI-Prolog不支持加载中文编码的源代码文件,但可以用UTF-8编码代替。
在文件最开头加一行:
代码:
:- encoding(utf8).
然后把整个文件保存为UTF-8编码。

查阅用户资料

浏览上一个主题 浏览下一个主题 返回页首  留言 [第1页/共1页]

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