如何在Haskell中编写具有初始条件的递归函数?

时间:2016-02-05 03:10:31

标签: haskell recursion definition

在F#中,我可以这样定义:

let rec sum = function
| [] -> 0
| x::xs -> x + sum xs

看起来很方便。在Haskell有通信吗?

3 个答案:

答案 0 :(得分:7)

假设您喜欢的功能是“我不必重复名称sum”,则LambdaCase扩展名会启用此功能:

{-# LANGUAGE LambdaCase #-}

module CaseExample where
import Prelude hiding (sum)

sum = \case
    [] -> 0
    x:xs -> x + sum xs

否则,没有扩展名的语法是

sum [] = 0
sum (x:xs) = x + sum xs

答案 1 :(得分:3)

sum :: [Int] -> Int

sum [] = 0
sum (x:xs) = x + sum xs

另一种方式

 Prelude>:{
 Prelude|let sumE  xs' = case xs' of
 Prelude|                     [] -> 0
 Prelude|                     x:xs' -> x + sumE xs'
 Prelude| 
 Prelude|:}
 Prelude> sumE [1,2,3]
 6
 Prelude> sumE []
 0

答案 2 :(得分:1)

这将使您编写多行代码:

  Prelude> :set +m

然后尝试此代码。提示符从前奏>更改前奏| :

Prelude> let sumE  xs' = case xs' of
Prelude|                     [] -> 0
Prelude|                     x:xs' -> x + sumE xs'