gpt4 book ai didi

haskell - 在 Haskell 中添加两个浮点值数组

转载 作者:行者123 更新时间:2023-12-03 14:39:40 25 4
gpt4 key购买 nike

任何人都可以提供一个示例,显示在 Haskell 中添加两个数组吗?

我对 Haskell 还很陌生,我通常发现通过采用我在一种语言中理解的简单内容并看看另一位程序员如何用他们的语言来做,我可以更快地学习。

很高兴看到一些创建两个浮点数组并调用一个函数的代码,该函数产生一个具有总和值的数组。相当于以下 C 代码的东西。

void addTwoArrays(float *a, float *b, float *c, int len) {
int idx=0;
while (idx < len) {
c[idx] = a[idx] + b[idx];
}
}

int N = 4;
float *a = (float*)malloc(N * sizeof(float));
float *b = (float*)malloc(N * sizeof(float));
float *c = (float*)malloc(N * sizeof(float));

a[0]=0.0; a[1]=0.1; a[2]=0.2; a[3]=0.4;
b[0]=0.0; b[1]=0.1; b[2]=0.2; b[3]=0.4;
addTwoArrays(a,b,c,N);

看到实现相同结果的 Haskell 代码对我的理解有很大帮助。我猜 Haskell 版本会创建结果数组并返回它,比如 c = addTwoArrays(a,b,N)?

谢谢。

最佳答案

为简单起见,我将使用(链接的)列表而不是数组,因为使用列表文字可以更轻松地创建它们。

a = [0, 0.1, 0.2, 0.4]
b = [0, 0.1, 0.2, 0.4]
c = zipWith (+) a b
zipWith是一个函数,它接受另一个函数和两个列表,然后通过将给定的函数应用于列表中相同索引处的每对元素来创建一个新列表。所以这里我们给 zipWith 的函数是 +因此它添加了两个列表的元素。

如果我们想在不使用 zipWith 的情况下做到这一点我们可以定义 addTwoLists像这样:
addTwoLists [] _ = []
addTwoLists _ [] = []
addTwoLists (x:xs) (y:ys) = (x+y) : (addTwoLists xs ys)

这里的逻辑是,当其中一个列表为空时,addTwoLists 将返回一个空列表。否则,它将返回两个列表头部的总和(即 a+b )加上它们的尾部相加的结果。

关于haskell - 在 Haskell 中添加两个浮点值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7371376/

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