Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “哈斯克尔错误”;输入上的分析错误‘;如果'&引用;_Haskell_If Statement_Compiler Errors_List Comprehension - Fatal编程技术网

Haskell “哈斯克尔错误”;输入上的分析错误‘;如果'&引用;

Haskell “哈斯克尔错误”;输入上的分析错误‘;如果'&引用;,haskell,if-statement,compiler-errors,list-comprehension,Haskell,If Statement,Compiler Errors,List Comprehension,我问了一个关于Haskell的问题,我试图在列表中只将一个函数设为偶数的一半,然后返回最终列表,其中只有偶数被修改(被减半),其余元素保持不变 但是当我试图编译代码时,我给出了一个错误,说“error:parse error on input'if'”,我找不到解决方案 halfEvens :: [ Int ] -> [ Int ] halfEvens xs = [x|x<-xs] if x mod 2 == 0 the

我问了一个关于Haskell的问题,我试图在列表中只将一个函数设为偶数的一半,然后返回最终列表,其中只有偶数被修改(被减半),其余元素保持不变

但是当我试图编译代码时,我给出了一个错误,说“error:parse error on input'if'”,我找不到解决方案

halfEvens :: [ Int ] -> [ Int ]
halfEvens xs = [x|x<-xs]
                if x mod 2 == 0
                the x = x / 2
                else
                x = x
halfEvens::[Int]->[Int]

halfEvens xs=[x | x您的代码存在多个问题:


  • [x | x因此,您希望应用一个函数,将偶数减半,但不使用奇数。我们可以编写一个函数,在单个
    Int
    上执行此转换,使用前奏曲中的
    偶数

    halfEven :: Int -> Int
    halfEven x | even x = x `div` 2
               | otherwise = x
    
    现在,我们可以在
    Int
    列表上映射该函数:

    halfEvens :: [Int] -> [Int]
    halfEvens xs = map halfEven xs
    
    或免积分:

    halfEvens = map halfEven
    
    或者使用列表:

    halfEvens xs = [halfEven x | x <- xs]
    

    halfEvens xs=[halfEven 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 xs=[x | x[t]


    有趣的是,我们被允许在那里使用相同的变量名,
    x抱歉,因为我的代码有点混乱。那么我应该怎么做才能使我的函数按照我的要求工作呢?你有什么建议吗?映射做了什么?它是将“半平”导入到“半平”还是换言之,赋值g“半偶”到“半偶”的值?@Wandy
    map半偶==\xs->[half偶x | x
    
    halfEvens xs = [halfEven x | x <- xs]
    
    halfEvens xs = [x | x <- xs, x <- [   -- instead of x = ...
                     if x `mod` 2 == 0
                       then {- x = -} x `div` 2
                       else {- x = -} x ]]