在F#中,我可以这样定义:
let rec sum = function
| [] -> 0
| x::xs -> x + sum xs
看起来很方便。在Haskell有通信吗?
答案 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'