dobb[] = []
dobb (x:xs) = [x * 2| x<- xs]
我对 Haskell 非常陌生,本周开始学习它。我想创建一个函数,将列表中的每个元素乘以 2。因此列表将从 [1,2,3] 到 [2,4,6]。我的代码工作正常,只是它跳过列表的第一个元素并从 [1,2,3] 到 [4,6]。如何使代码也乘以第一个元素?
[x*2 | x<-[1..5]]
我发现这一行可以实现我正在寻找的功能,但我不明白如何从这行代码开始并将其转换为适用于所有列表的函数。
最佳答案
我会回答你的最后一个问题,
how to go from this line of code,
[x*2 | x <- [1..5]]
and convert it to a function that works for all lists[?]
这称为泛化,是通过抽象来实现的。首先我们命名它,
foo = [x*2 | x <- [1..5]]
然后我们命名我们用作示例的任意数据片段,
foo = let {xs = [1..5]} in [x*2 | x <- xs]
然后我们通过删除内部定义中的任意数据来对其进行抽象,让它成为函数参数,现在由它指定,函数的调用者:
foo xs = [x*2 | x <- xs]
就是这样,通用函数适用于所有列表,执行与我们首先使用的特定示例相同的操作。
关于list - Haskell 函数将列表中的元素相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68957192/