prolog-cut

    2熱度

    1回答

    我遇到非常奇怪的行爲(對我來說)。根據我的理解,一旦執行通過一次剪切,它就不能回溯到它之上。但這正是代碼所做的。有人可以解釋爲什麼這樣做嗎? 下面是代碼: example([],[]). example([X,Y,Z|Tail],[Z|NewTail]) :- X < Y, example(Tail,NewTail). example([X,Y,Z|Tail],[X|New

    6熱度

    2回答

    我是新來的prolog,並且正在試驗如何讓它在找到一個答案後停止查詢。我使用此代碼: member1(L,[L|_]). member1(L,[_|RS]) :- member1(L,RS),!. 的結果是:「真正的」 | ?- member1(3,[3,2,3]). true ? a yes 我迷路了,我怎麼能拿序言停止打印而只是打印「是」。我試過使用if/else

    12熱度

    1回答

    我開始學習prolog,並希望使整個切割更清晰。 我已經讀過「綠色切割不會改變程序的聲明性含義,而紅色切割」。但是,程序的含義並不是純粹的聲明式(僅僅是因爲prolog實際上會回溯所有選項)。 下面是一個例子: p(1). p(2) :- !. p(3). 有人說,這是綠色的削減。但如果我運行這個: p(X), X =:= 3. 我會得到「真」沒有削減,「假」與削減。 那麼,我錯過了什

    1熱度

    2回答

    我有這方面的條款: a(1). a(2). b(a). c(A,B,C) :- a(A),d(B,C). c(A,B,C) :- b(A),d(B,C). d(B,C) :- a(B),!,a(C). d(B,_) :- b(B). 當我運行查詢C(X,Y,Z)的答案是: X = 1, Y = 1, Z = 1 ; X = 1, Y = 1, Z = 2 ; X = 2, Y

    2熱度

    1回答

    將切割(!)放在子句的開頭是什麼意思? p(X,Y) :- !, q(X), r(X,Y). 什麼是!和fail以及如何之間的區別是,他們有關係嗎? 謝謝。 我在想fail,這個謂詞就會「失敗」,而不是不回溯?只是想確定:)

    0熱度

    1回答

    我通過Learn Prolog Now! 's chapter on cuts閱讀,同時閱讀Bratko的人工智能Prolog編程第5章:控制回溯。起初,似乎剪輯是模仿其他編程語言已知的if-else子句的直接方式,例如, # Find the largest number max(X,Y,Y):- X =< Y,!. max(X,Y,X). 然而,正如指出的路線此代碼將在情況下未能在當我

    1熱度

    1回答

    我定義我的知識基礎爲: edge(mammal,isa,animal). edge(human,isa,mammal). edge(simba,isa,human). edge(animal,swim,bybirth). edge(human,swim,mustlearn). path(X,Y) :- edge(X,isa,Y). path(X,Y) :- edge(X,isa,Z

    3熱度

    1回答

    對於Prolog程序員,我有一個非常簡單的問題。這應該是非常容易的,但我對這種語言沒有任何經驗,所以請幫助。 我想在Prolog中解釋一些簡單的編程語言。在這種語言中,我可以有兩種類型的變量 - 簡單變量和數組變量。我有計算給定變量的值的函數: %calc(+var, +state, -result) 變量可以是一個簡單的變量等像array(ident, index)x或數組變量。我不知道該如

    2熱度

    2回答

    這Prolog程序定義的第三個參數是前兩個數字參數的最大值: max(X, Y, X) :- X >= Y, !. max(X, Y, Y). 我認爲這個程序工作得很好。但我被告知它可能會給出不正確的結果。你能說出什麼時候?爲什麼?

    1熱度

    1回答

    我已經通過的答案和my previous question評論閱讀,我試圖從Bratko(Prolog的編程人工智能,第一個例子應用給出解釋。130 ),但我不確定我完全理解它。下面的例子說明: 我讀了樹和代碼如下: 在目標名單C :- P, Q, R, !, S, T, U.的Prolog將逐一嘗試實例變量,如正常,最終得到true.。假設發現P和Q的值,並且R上的第一次嘗試失敗,則Prolog