簡體   English   中英

PROLOG 賦值問題

[英]PROLOG Asignation problems

我必須解決一個涉及 WWESupercard 游戲的問題。 這個想法是拿 2 張牌讓他們戰斗,單獨比較每個統計數據和每個組合,總共進行 10 次比較。 如果一名戰士獲得超過 50% 的戰斗 (6/10),則它獲勝。

我遇到的問題是“是”語句對我不起作用。

這是我迄今為止嘗試過的一些“解決方案”,僅使用基本統計數據而不使用組合來進行更快的測試,但沒有一個能按我的預期工作:

leGana(X,Y) :- T is 0, 
              ((A is 0, (pwr(X,Y) -> A1 is A+1));
               (B is 0, (tgh(X,Y) -> B1 is B+1));
               (C is 0, (spd(X,Y) -> C1 is C+1));
               (D is 0, (cha(X,Y) -> D1 is D+1))),
          T1 is T+A1+B1+C1+D1, T1 > 2.

leGana(X,Y) :- T is 0, 
                ((pwr(X,Y) -> T is T+1);
                 (tgh(X,Y) -> T is T+1);
                 (spd(X,Y) -> T is T+1);
                 (cha(X,Y) -> T is T+1)),
            T1 > 2.

我嘗試了其他方法,但大多數時候我總是遇到同樣的 2 個錯誤:

  • 它在“T is T+1”上失敗說“0 is 0+1”並且失敗
  • 在示例 1 中,它執行“A1 is A+1”,得到“1 is 0+1”,但隨后它直接跳到代碼的最后一行,得到“T1 is 0+1+_1543+_1546.. ”

另外,如果我寫代碼的方式不正確,這是我第一次在這里尋求幫助,所以歡迎任何建議。

Prolog 是一種聲明式語言,這意味着一個變量只能有一個值。

如果你這樣做:

X is 1, X is 2.

它會失敗,因為你試圖說X具有值1和值2 ,這是不可能的......那is賦值而是一種評估右側的相等性。

相似地

X = 1, X = 2.

將失敗。

如果你想做相當於 Python 的

def f(x):
   result = 1
   if x == 0:
      result += 1
   return result

那么你需要做這樣的事情:

f(X, Result) :-
    Result1 = 1,
    (  X = 0
    -> Result is Result1 + 1
    ;  Result = Result1
    ).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM