我遇到了有关Haskell的问题,我试图将一个函数仅在列表中设置为偶数的一半,然后返回最终列表,仅保留修改后的偶数(减半),其余元素保持不变。
但是,当我尝试编译代码时,出现了一个错误,提示“错误:解析输入'if'上的错误”,但我找不到解决方案。
halfEvens :: [ Int ] -> [ Int ]
halfEvens xs = [x|x<-xs]
if x mod 2 == 0
the x = x / 2
else
x = x
最佳答案
尽可能多地保留原始代码/意图,
halfEvens xs = [x | x <- xs, x <- [ -- instead of x = ...
if x `mod` 2 == 0
then {- x = -} x `div` 2
else {- x = -} x ]]
其类型推导为
halfEvens :: Integral t => [t] -> [t]
。有趣的是,我们可以使用
x <- [...]
构造在此处使用相同的变量名;它只是被蒙上阴影。没关系,因为我们只对新值感兴趣。这样,尽管Haskell中没有更新变量,但我们在心理上将其视为变量“更新”。