我对 prolog 很陌生,并且在理解一些基本算术方面遇到了一些问题。我想创建一个递归乘法的函子。即:3*4 = 3+3+3+3 = 12。
我通过 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 + _).
现在它一直沿着递归链一直到基本情况,当它开始备份时,它尝试 todo Return is (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
最后编辑:终于弄清楚了,使用 _ 导致了价值的奇怪变化。谢谢你的帮助。