Re: [問題] Prolog的符號: "\+"和"!"是甚麼?
※ 引述《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
推
12/25 13:50, , 1F
12/25 13:50, 1F
推
12/25 20:11, , 2F
12/25 20:11, 2F
→
12/25 21:39, , 3F
12/25 21:39, 3F
推
12/26 04:00, , 4F
12/26 04:00, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章