gpt4 book ai didi

lambda - Prolog - 将一个列表与一个元素相乘,结果带有一个奇怪的尾部?

转载 作者:行者123 更新时间:2023-12-01 09:32:01 25 4
gpt4 key购买 nike

我想将两个列表相乘,我将左边的列表乘以其中的每个元素正确的 list 。

例如:

?- multLists([3,4,2], [4,7,8], R).
R = [[12,16,8],[21,28,14],[24,32,16]].

为此,我编写了一个辅助谓词,它接受一个列表并将其相乘通过单个标量:

multListElem([], _, _).
multListElem([H|T], Result, Elem) :-
multListElem(T, W, Elem),
Z is H*Elem,
Result = [Z|W].

但是现在,当我运行 ?- multListElem([1,2,3], X, 3).我明白了:

1 ?- multListElem([1,2,3], X, 3).
X = [3, 6, 9|_G1840].

那个奇怪的尾部_G1840是什么?

最佳答案

错误在这里:multListElem([],_,_)。当第一个列表为空时,结果为空,所以必须写multListElem([],[],_)。

当您使用列表时,您可以使用函数式惯用语,例如 maplist :

multLists(L1, L2, R) :-
maplist(mult_one_list(L1), L2, R).

mult_one_list(L1, Elem, R) :-
maplist(mult_2_numbers(Elem), L1, R).

mult_2_numbers(V1, V2, R) :-
R is V1 * V2.

maplist将第一个参数应用于每个列表的每个元素(作为参数传递给它)。

关于lambda - Prolog - 将一个列表与一个元素相乘,结果带有一个奇怪的尾部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com