level 5
win prolog里面的条件分支语句使用两条同名的语句来表示的:
speak(X):-X>1,write("T").
speak(X):-write("F").
可是我如何将读取/判断/打印写入一个语句当中呢?
2012年03月09日 14点03分
1
level 1
speak(X):- read(X), (X > 1 -> write('T') ; write('F') ).
用swi-prolog的话这样写就可以了。
2012年03月10日 08点03分
3
level 5
谢谢,能否在这个基础上,改成"说谎者悖论"。也就是,说真话的杀死,说假话的烧死:
speak(X):read(X),(X='T'->kill(X);burn(X));
然后speak(burn(me))。说"你会烧死我",导致悖论。
prolog能表达和计算这样的一个说法么?
2012年03月12日 01点03分
4
level 1
你是想让电脑判断你说执行的查询是否是个悖论吗?
如果不是的话你能举个例子说一下,比如你想输入什么并得到怎样的结果?
2012年03月12日 04点03分
5
level 5
理论上能做到么?
我输入"你会烧死我",prolog程序回答: 总是无解。
2012年03月12日 09点03分
6
level 5
8楼的大侠,我对你的程序有个疑问,你的两句Judge里面:
udge(Answer,IfAction,"kill"):-IfAction=Answer.%说真话
judge(Answer,IfAction,"burn"):-not(Answer=IfAction).%说假话
其实并没有用到"kill"和"burn"啊,程序怎么能工作呢?
2012年03月13日 00点03分
10
level 5
我在swiprolog里面测试了一下。
首先编辑一个文件
judge(Answer,IfAction,"kill"):-IfAction=Answer.%说真话
judge(Answer,IfAction,"burn"):-not(Answer=IfAction).%说假话
finalJudge(Answer,Action):-judge(Answer,Action,Action).%最终判决,假设和实际行动要一致
保存。然后在swiprolog的菜单选择"Consult",导入这个文件。然后Ctrl-D进入用户模式:
我看到的结果是:
% c:/Users/Administrator/Desktop/my.pro compiled 0.00 sec, 1,140 bytes|: % user://1 compiled 0.04 sec, 1,320 bytestrue.
2 ?- finalJudge("burn",Action).fail.
3 ?- finalJudge("kill",Action).Action = [107, 105, 108, 108] .
怎么kill能输出一个奇怪的结果? burn是fail
楼上的你说你的结果是"No solution",你用的是swiprolog么还是别的什么?
2012年03月13日 01点03分
11