【发布时间】:2011-02-05 17:05:09
【问题描述】:
我应该在 prolog 中创建一个谓词,以便 iprod(List1, List2, Result) 采用两个长度相等的列表,每个列表都包含整数。结果是两个向量的点积。
例如,List1 = [1,2,3]、List2 = [4,5,6],则结果将是 1*4 + 2*5 + 3*6。另外我不应该使用内置的 dotproduct 函数。
到目前为止我的代码:
iprod([],[], 0).
iprod([H1|List1], [H2|List2], Result is H1 * H2) :- iprod(List1, List2, Result).
【问题讨论】:
-
那么问题是什么?是“你会为我做这个作业吗”?
-
有关在 SO 上寻求家庭作业帮助的指南,请阅读 "How to ask and answer homework questions?"
-
让我重新表述一下。以上是问题题。我到了 Result = ((0 is 2 * 4) is 1 * 3) 的地步。为什么 Result 不是实际数字?相反,它给了我所有的计算?
-
您没有显示代码,因此很难想象是什么导致了您为 Result 报告的有趣表达式。通常“=”不会对算术表达式求值,它只会将算术表达式(公式)统一为一个术语,但谓词“is”将强制算术表达式的值被统一。所以我怀疑你需要更好地理解“=”和“is”的不同用法。在这种情况下展示你的代码的重要性是看你是否喜欢在 Prolog 中解决问题的递归方法。毕竟,向量/列表显然可以有任何长度。
-
好的,我会仔细检查以确保我理解其中的区别。这是我的代码,希望它有意义。 iprod([],[], 0)。 iprod([H1|List1], [H2|List2], 结果是 H1 * H2) :- iprod(List1, List2, Result)。