我想通過一系列事實創建自定義枚舉。Prolog創建自定義枚舉的快捷方式
greater(X,Y) :- less (Y,X). less(a,b). less(b,c). less(c,d).
這工作正常,但有重大的重複。
我正試圖削減。有沒有一種方法可以通過轉換使用一個簡單的線性系列事實數組?
transform([a,b,c,d]) resulting in the same less definitions.
我已經創建了一個使用一個陣列和下一步以/成員函數來測試「少」的定義,但是像我可以與個別聲明我不能添加異常或等同例。因此,我希望簡化案例定義的簡化,然後再用更多的定義來補充它。
這讓我想起了lisp中的defmacro在哪裏有用。
謝謝。
編輯:
我能夠生成使用斷言一個系列。它成功定義了一切,但返回一個錯誤。我覺得這不是正確的方法。
set_less([]). set_less([X,Y|L]):- assert(myless(X,Y)) , set_less([Y|L]). :- set_less([a,b,c,d]). Output: Goal (directive) failed: user:set_less([a, b, c, d]) ?- listing. :- dynamic myless/2. myless(a, b). myless(b, c). myless(c, d).
第二個編輯:
mylist([a,b,c,d]). set_less([]). set_less([_]). ----- Key! set_less([X,Y|L]):- assert(myless(X,Y)) , set_less([Y|L]). :- set_less([a,b,c,d]).
但這工作!這是定義自定義枚舉的好方法嗎?我現在看到它的作品,謝謝!
@demosthenex:您set_less/1謂詞可以作出努力。跟蹤set_less([a,b,c,d])的目標,你會發現它失敗了,因爲set_less([d])失敗。 – Nelson 2010-01-14 21:46:04