Re: [問題] Prolog的符號: "\+"和"!"是甚麼?

看板Programming作者 (喲)時間15年前 (2009/12/25 02:05), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1BCwrR5Y (Programming)
文章代碼(AID): #1BCwrR5Y (Programming)