取决于两个布尔警戒的不同递归的语法是什么?

问题描述 投票:0回答:1

我对Haskell还是很陌生,正在尝试编写一个简单的函数,该函数将整数数组作为输入,然后根据数组是奇数还是偶数返回所有元素或平均值的乘积长度。

我了解如何为递归设置基本案例,以及如何为不同的案例设置布尔值守卫,但我不知道如何协同执行。

arrayFunc :: [Integer] -> Integer                                                                                       
arrayFunc [] = 1                                                                                                        
arrayFunc array                                                                                                           
| (length array) % 2 == 1 = arrayFunc (x:xs) = x * arrayFunc xs                                                     
| (length array) % 2 == 0 = ((arrayFunc (x:xs) = x + arrayFunc xs) - 1) `div` length xs 

当前出现错误

"parse error on input '='
Perhaps you need a 'let' in a 'do' block?"

但是我不明白如何在这里使用let

我对Haskell还是很陌生,正在尝试编写一个简单的函数,该函数将整数数组作为输入,然后根据是否...]返回所有元素或平均值的乘积。

这样定义一个辅助内部函数:

arrayFunc :: [Integer] -> Integer
arrayFunc [] = 1
arrayFunc array
  | (length array) % 2 == 1  =  go1 array
  | (length array) % 2 == 0  =  go2 array
  where
    go1 (x:xs)  =  x * go1 xs
    go2 (x:xs)  =  ((x + go2 xs) - 1) `div` length xs 

这仅处理您问题中的句法问题。特别是[Integer]不是数组-它是整数的[[list

但是,当然,变量名不会影响代码的正确性。
function haskell syntax definition guard-clause
1个回答
0
投票

这样定义一个辅助内部函数:

© www.soinside.com 2019 - 2024. All rights reserved.