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

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


您没有登录。 请登录注册

用swiprolog尝试解决旅行者悖论,3行程序,不成功。

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

judge(Answer,IfAction,Action):-IfAction=Answer,Action="kill".
judge(Answer,IfAction,Action):-not(Answer=IfAction),Action="kill".
finalJudge(Answer,Action):-judge(Answer,Action,Action).%
上述内容保存成.pl文件,用swiprolog打开,Compile buffer,然后在命令行里面运行:
1 ?- finalJudge
% c:/Documents and Settings/zhang/My Documents/my1.pl compiled 0.00 sec, 0 bytes
1 ?- finalJudge("burn",Action).
false. 2 ?- finalJudge("kill",Action).
Action = [107, 105, 108, 108]
为什么finalJudge("kill",Action)得到是一堆没有意义的结果?

我期待的是程序告诉我fail这样的结果,也就是无法求解。

查阅用户资料
donet8 写道::judge(Answer,IfAction,Action):-IfAction=Answer,Action="kill".
judge(Answer,IfAction,Action):-not(Answer=IfAction),Action="kill".
finalJudge(Answer,Action):-judge(Answer,Action,Action).%
上述内容保存成.pl文件,用swiprolog打开,Compile buffer,然后在命令行里面运行:
1 ?- finalJudge
% c:/Documents and Settings/zhang/My Documents/my1.pl compiled 0.00 sec, 0 bytes
1 ?- finalJudge("burn",Action).
false. 2 ?- finalJudge("kill",Action).
Action = [107, 105, 108, 108]
为什么finalJudge("kill",Action)得到是一堆没有意义的结果?

我期待的是程序告诉我fail这样的结果,也就是无法求解。

我还没细看哈,不过乍看之下,
[107, 105, 108, 108]刚好是kill四个字母的ASCII编码,
prolog显示string(用""括起来的字符串)的方式是用List表示出每个字母的编码,
就像你得到的这个,也就是说传回的是"kill"这个解,
你想它显示kill这个字的话应该用''括起来,'kill'表示的是原子。

不过我还不知道为什么你不是直接得到false,
等我有空我再细看吧!

查阅用户资料 http://prolog.longluntan.net
你的确做出答案,代码按照你的方法给出解答。不过,悖论问题不会是需要一个解答。悖论,与那些可解的问题,定义问题的范围不同。通常悖论问题,是指一个系统可以导出二则恰好彼此背反的事实。用到的知识大都是演繹推理 (deductive reasoning) 的技巧。以Prolog來說,較多使用 assert/* 。

此题结构是在语境中,会实现旅行者被烧死,所以当你要认为他的话有理,会assert 一则他被烧死的事实到系统中。并且因为他这句话成立,要assert 另一个事实,说他不是被烧死的。然后系统全局检验旅行者的死因,遇到矛盾,说旅行者是被杀死同时也是被烧死的,所以证明旅行者因这二件事而死的事实不成立。于是此题无法用这三行写完。

查阅用户资料 http://yauhsien.wordpress.com

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

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