1
我對prolog非常陌生,並且在理解某些基本算術時遇到了一些問題。我想創建一個遞歸的乘法器。 IE:3 * 4 = 3 + 3 + 3 + 3 = 12.Prolog遞歸算術
我把它通過SWIPL的跟蹤命令,並且在遞減計數時失敗。
這是我到目前爲止的代碼,但它不起作用。
multn(_,0,0).
multn(_, Count ,Return) :- Count is Count-1,
Return is 0,
multn(_,Count,Return),
Return is Return + _.
編輯:由基於你說的關於「是」的功能是什麼一些新的變化。
multn(_, Count ,Return) :- Count1 is (Count-1),
multn(_,Count1,Return1),
Return is (Return1 + _).
現在是使它一路下滑遞歸鏈的基本情況,當它啓動時,它的方式備份失敗就試圖待辦事項回報率=(RETURN1 + _)。它似乎正在改變_變量。這裏是我的蹤跡:
[trace] ?- multn(3,2,X).
Call: (6) multn(3, 2, _G388) ? creep
^ Call: (7) _L142 is 2+ -1 ? creep
^ Exit: (7) 1 is 2+ -1 ? creep
Call: (7) multn(_L160, 1, _L143) ? creep
^ Call: (8) _L163 is 1+ -1 ? creep
^ Exit: (8) 0 is 1+ -1 ? creep
Call: (8) multn(_L181, 0, _L164) ? creep
Exit: (8) multn(_L181, 0, 0) ? creep
^ Call: (8) _L143 is 0+_G461 ? creep
ERROR: is/2: Arguments are not sufficiently instantiated
^ Exception: (8) _L143 is 0+_G461 ? creep
Exception: (7) multn(_L160, 1, _L143) ? creep
Exception: (6) multn(3, 2, _G388) ? creep
最後編輯:最後算出來了,使用_引起了奇怪的值變化。謝謝你的幫助。
是的,所有'_'s * *不同*,即使在一個規則內。你應該命名你的變量 - 具有相同名稱的變量是相同的變量。 'X *(N + 1)= X * N + X'中的所有X都必須相同。 – 2013-04-28 09:23:52