List 在Prolog中按组件将两个列表相乘
我想在Prolog中创建一个函数,将两个列表按组件方式相乘,并返回结果列表 例如:List 在Prolog中按组件将两个列表相乘,list,recursion,prolog,multiplication,List,Recursion,Prolog,Multiplication,我想在Prolog中创建一个函数,将两个列表按组件方式相乘,并返回结果列表 例如: ?- multiply_lists([1,2,3], [4,5,6], X). X = [4,10,18]. 我想在不使用内置Prolog函数的情况下编写此函数。首先定义基本情况-将两个空列表相乘的结果就是空列表 multl([],[],[]). 然后,定义函数的递归部分: multl([H1|Tail1],[H2|Tail2], [H3|Tail3]):- multl(Tail1, Tail
?- multiply_lists([1,2,3], [4,5,6], X).
X = [4,10,18].
我想在不使用内置Prolog函数的情况下编写此函数。首先定义基本情况-将两个空列表相乘的结果就是空列表
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).
有趣的是
:- use_module(library(clpfd)).
mutiply(X,Y,Z) :-
Z #= X*Y.
multiply_lists(L1, L2, Out) :-
maplist(mutiply, L1,L2,Out).
结果如下:
?- multiply_lists([1,2,3], [4,5,6], X).
X = [4, 10, 18].
?- multiply_lists(X, [4,5,6], [4,8,10]).
false.
?- multiply_lists(X, [4,5,6], [4,10,18]).
X = [1, 2, 3].
?- multiply_lists(X, Y, [4,10,18]).
X = [_17366, _17372, _17378],
Y = [_17396, _17402, _17408],
_17366 in -4.. -1\/1..4,
_17366*_17396#=4,
_17396 in -4.. -1\/1..4,
_17372 in -10.. -1\/1..10,
_17372*_17402#=10,
_17402 in -10.. -1\/1..10,
_17378 in -18.. -1\/1..18,
_17378*_17408#=18,
_17408 in -18.. -1\/1..18.
这很有趣,但我需要从头开始编写函数,而不使用任何库函数。