看板 Programming 關於我們 聯絡資訊
※ 引述《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
MOONRAKER:讚 59.120.168.228 12/25 13:50
iamsimple:推! 58.114.161.52 12/25 20:11
yauhh:謝謝 59.112.228.249 12/25 21:39
r596twy:這些解釋的真的很讚!!疑惑都解了 感謝!!118.161.138.153 12/26 04:00