作者yauhh (哟)
看板Programming
标题Re: [问题] Prolog的符号: "\+"和"!"是甚麽?
时间Fri Dec 25 02:05:12 2009
※ 引述《r596twy (汤姆熊)》之铭言:
: 在写程式时以及看说明时看到这些符号,可是还是不是很懂他的意思,想请问各位大大这
: 两个符号怎麽用??
\+/1 是检查一个goal不可证明为真的predicate,意义等於 not/1.
例如 \+(atom(a)) 答案是false,跟 not(atom(a)) 一样.
! 就比较费工夫解释了. ! 是cut,把程式的逻辑结构切掉一些枝节.
基本上, ! 出现在程式中的意思,是:
如果在 ! 左边的predicates成立,就把在 ! 之後head相同的程式放弃掉.
如果在 ! 左边的predicates不成立,就把同一行程式 ! 右边的predicates放弃掉.
例如要做个判断,如果在N大於0做什麽事,N小於或等於0又该做什麽是,程式本来是这样:
p(N, E1, E2) :- N > 0, call(E1).
p(N, E1, E2) :- N =< 0, call(E2).
二行程式的head相同,但第一行一定要判断 N>0, 第二行一定要判断 N=<0.
如果第二行没先判断 N=<0,答案就不一样了.
但如果使用 ! (cut)...
p(N, E1, E2) :- N > 0, !, call(E1).
p(N, E1, E2) :- call(E2).
第一行会先判断 N>0,如果成立就评估call(E1),并将第二行程式放弃掉.
如果第一行的 N>0 不成立,就不评估call(E1),直接跳去评估第二行的call(E2).
再举个例子,逻辑否定 not/1 用到 ! 这样做:
not(A) :- call(A), !, fail.
not(_).
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.225.39
1F:推 MOONRAKER:赞 59.120.168.228 12/25 13:50
2F:推 iamsimple:推! 58.114.161.52 12/25 20:11
3F:→ yauhh:谢谢 59.112.228.249 12/25 21:39
4F:推 r596twy:这些解释的真的很赞!!疑惑都解了 感谢!!118.161.138.153 12/26 04:00