【发布时间】:2014-03-30 21:28:15
【问题描述】:
所以我一直在研究以下问题:
编写一个 3 位谓词 scalarMult,其第一个参数是 整数,其第二个参数是整数列表,其第三个参数是整数列表 参数是标量乘以第二个参数的结果 首先。例如,查询
?- scalarMult(3,[2,7,4],Result).应该让步
Result = [6,21,12]在累加器和包装谓词的帮助下做到这一点。
这就是我所做的:
scalarMult(I, List1, List2):- scalarMult1(I, List1, [], List2).
scalarMult1(I,[], A, A).
scalarMult1(I,[H|T], A, Result):- H1 is H*I, scalarMult1(I,T,[H1|A],Result).
唯一的问题是它将新元素放在累加器的头部,所以我最终得到了一个反向列表(所以对于上面的例子,我会得到 Result = [12,21,6] )。有什么办法可以解决这个问题吗?我尝试在我的代码中使用 reverse,但我所有的尝试都失败了。
谢谢
【问题讨论】:
-
这不是您问题的答案,所以我将其作为评论发布:基于
maplist的解决方案可能看起来像scalar_mult(N, L, R) :- maplist(mul(N), L, R). mul(X, Y, R) :- R is X * Y.
标签: list prolog reverse accumulator