小编Azr*_*iel的帖子

Haskell学习练习给出了奇怪的结果

这是个问题:

"写的是计算列表的平均值的功能,即通过其长度划分列表中的所有元素的总和.(您可能需要使用fromIntegral功能列表的长度将从一个整数到浮点数.)"

首先我试过这个:

mean :: [Double] -> Double
mean []     = 0
mean (x:xs) = (x + mean xs) / (1 + mean xs)
Run Code Online (Sandbox Code Playgroud)

但它给了我奇怪的结果,例如,当我像这样使用它时:

mean [2,4,6]  
Run Code Online (Sandbox Code Playgroud)

它给我的结果:1.41176
它应该是:4

为什么?

我尝试了另一件事:

mean :: [Double] -> Double  
mean list = (summ list) / (count list)  
    where count []     = 0  
          count (x:xs) = 1 + count xs  
          summ []      = 0  
          summ (x:xs)  = x + summ xs
Run Code Online (Sandbox Code Playgroud)

但是当我试图将文件加载到GHC时,我有一个错误.
错误是:

parse error on input 'count'  
Failed, modules loaded: none
Run Code Online (Sandbox Code Playgroud)

再一次,我做错了什么?

最后,我尝试了这个(成功): …

haskell

6
推荐指数
2
解决办法
521
查看次数

我是否根据foldr使用声音等式推理来定义滤波器?

好吧,这是使用foldr定义过滤函数:

myFilter p xs = foldr step [] xs
    where step x ys | p x       = x : ys
                    | otherwise = ys
Run Code Online (Sandbox Code Playgroud)

例如,假设我有这个功能:

myFilter odd [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

所以它将是:

foldr step [] [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

这将是

step 1 (foldr step [] [2,3,4])
Run Code Online (Sandbox Code Playgroud)

这将是

step 1 (step 2 (foldr step [] [3,4]))
Run Code Online (Sandbox Code Playgroud)

这将是

step 1 (step 2 (step 3 (foldr step [] [4])))
Run Code Online (Sandbox Code Playgroud)

这将是

step 1 (step 2 (step 3 (step 4 (foldr step [] []))))
Run Code Online (Sandbox Code Playgroud)

并且foldr step [] [][] …

haskell filter fold equational-reasoning

6
推荐指数
1
解决办法
625
查看次数

haskell和函数的类型定义.几个问题

如果我这样做any isUpper "asBsd",我会得到的True.
这里,第二个元素any是一个字符串.
但是,如果我这样做:

any ("1" `isInfixOf`) ["qas","123","=-0"]
Run Code Online (Sandbox Code Playgroud)

第二个元素any是一个字符串列表.
如何以及为什么这两个功能之间存在差异?

另一个例子.
如果我写filter isUpper "asdVdf",我会得到"V".
这里,要过滤的第二个元素是一个字符串.
但是,如果我这样写:
filter (isUpper . head) ["abc","Vdh","12"]我会得到的["Vdh"].
如您所见,要过滤的第二个元素现在是一个字符串列表.
为什么存在差异以及haskell如何知道它在两种情况下都是正确的?

总结一下:
我不明白在同一个函数中,有一次haskell得到第二个元素是一个字符串,而在其他时候,haskell得到一个字符串列表,在第二个元素中.
有一次它发生在any功能上,另一次发生在filter功能上.
haskell(和我)怎么知道它在两种情况下都是正确的?

谢谢 :-).

haskell types type-inference function definition

3
推荐指数
2
解决办法
505
查看次数