如何实现Prolog中两个表的乘法函数?
实现Prolog的mult/3函数实现列表“乘法”
你需要的mult(L1, L2, L)函数,核心是将列表L1重复L2的长度次,最终拼接成一个新列表L。比如你给出的例子中,L2有3个元素,所以L1被重复3次后拼接,得到6个x的列表。
递归实现思路
- 终止条件:当
L2是空列表时,重复0次,结果L也为空列表。 - 递归步骤:每次去掉
L2的一个元素,递归处理剩余部分得到子结果,再将L1拼接到子结果的前面,最终得到完整结果。
完整代码
% 基础情况:L2为空时,结果为空 mult(_, [], []). % 递归情况:去掉L2的一个元素,递归处理尾部,再拼接L1和子结果 mult(L1, [_|T], L) :- mult(L1, T, Rest), append(L1, Rest, L).
测试验证
执行查询:
?- mult([x,x],[x,x,x],R).
会得到输出:
R = [x, x, x, x, x, x]
补充说明
如果你的需求是另一种“乘法”(比如对应元素运算,但从测试用例来看不适用),当前代码完全匹配你给出的示例逻辑。若需调整功能,可修改递归规则中的拼接逻辑。
内容的提问来源于stack exchange,提问作者Mohammed Amine
相关产品推荐
相关产品推荐

