我正在進行prolog任務,目前我非常接近解決方案。所以,這個問題是一個約束滿足問題,我必須找到一組變量的值,以使某些條件成立。具體來說,給定3個單詞(W1,W2,W3),將它們的變量賦值爲W1 + W2 = W3。一個例子是SEND + MORE = MONEY,或者IT + IS = ME。帶變量的Prolog點積(約束滿足)
約束條件是:(1)它們必須正確相加,(2)起始字母不能是0(3),所有變量必須是不同的。它必須適用於一般性的單詞問題。當我嘗試確保它們合起來的時候,我遇到了問題(我遇到了其他條件,並且我理解了這個問題)。第二個字的問題而言,我們應該有:
10*I + 1*T
+10*I + 1*S
___________
10*M + 1*E
所以,我做了一個功能,使的10次冪的名單在一定的長度,就像這樣:
powlist(1,L) :-
append([1.0],[],L).
powlist(N,L) :-
N1 is N-1,
X is 10**N1,
powlist(N1,L1),
append([X],L1,L),
!.
我也有字母的實際列表,比如[I,T,I,S,M,E]。然後我建立了一個系列列表(我將在後面解釋這部分),從powlist中刪除,所以我們有如下的東西:[10,1,10,1,-10,-1]。我這樣做,所以如果我們在這個係數列表和字母列表之間取得點積,並且它是零,那麼約束就會得到滿足。但是,我無法讓這個點積理論起作用。我現在有這樣一行:
scalar_product(Coefficients, Letters, #=, 0)
但是,這是給我下面的錯誤:
!參數2中的實例化錯誤是/ 2
!目標:_102是0 + 10.0 * _109
我不確定如何定義點積,因此它可以在變量(而不是原子)上工作。所有其他的代碼完美地工作(我不想把它放在這裏,因爲這是介紹性的prolog課程的一個非常常見的問題,我不想給懶惰的人解答)。你們有什麼建議?