在Prolog中将两个列表按组件相乘

时间:2018-05-12 14:49:11

标签: list recursion prolog multiplication

我想在Prolog中创建一个函数,它将两个列表组合在一起,并返回结果列表。

例如:

?- multiply_lists([1,2,3], [4,5,6], X).
X = [4,10,18].

我想在不使用内置Prolog函数的情况下编写此函数。

1 个答案:

答案 0 :(得分:1)

首先定义基本情况 - 将两个空列表相乘的结果是空列表。

multl([],[],[]).

然后,定义函数的递归部分:

multl([H1|Tail1],[H2|Tail2], [H3|Tail3]):-
        multl(Tail1, Tail2, Tail3),
        H3 is (H1 * H2).

这里发生的事情是两个列表头部的元素相乘并与结果的尾部连接。

总而言之,我们有:

multl([],[],[]).
multl([H1|Tail1],[H2|Tail2], [H3|Tail3]):-
    multl(Tail1, Tail2, Tail3),
    H3 is (H1 * H2).