所以我一直在研究以下问题:
编写一个 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,但我所有的尝试都失败了。
谢谢