gpt4 book ai didi

解释的Haskell数据

转载 作者:行者123 更新时间:2023-12-02 08:20:15 24 4
gpt4 key购买 nike

我正在为数据卡后的“Of”寻找一个好的解释:

data Suit = Club | Diamond | Spade | Heart deriving (Eq, Show, Ord, Enum)
data Value = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Bobe | Dame | King | Ass deriving (Ord, Eq, Show, Enum)

data Card = Value `Of` Suit
deriving (Show)

我没能用 google 找到好的文档或解释。

最佳答案

在 haskell 中,任何(非运算符,非部分应用的)函数,即具有类型签名 f::a -> b -> c 的函数,都可以使用中缀 - 使用 反引号语法,用反引号包围函数,例如

mod m n = m `mod` n

这里函数的第一个参数位于“运算符”的左侧,第二个参数位于右侧。

反过来,如果你有一个操作符+,你想用前缀符号来应用它,你只需用(,)

a + b = (+) a b

回到你的代数数据类型,用通常的方式写它

data Card = Of Value Suit deriving (...)

如果您现在加载文件或将定义粘贴到 ghci 中,您可以向交互式编译器询问表达式的类型。

$ > ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Prelude> data Suit = Heart |... deriving Show
Prelude> data Value = One |... deriving Show
Prelude> data Card = Of Value Suit deriving Show
Prelude> :t Of
Of :: Value -> Suit -> Card

这正是我们需要使用中缀语法的类型 - 然后我们可以按以下形式使用它:

Prelude> One `Of` Heart
Of One Heart

注意:如果你想要一个多于两个参数的函数,你必须给它一个像这样的名字

:t foldl
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
Prelude> -- an example of a function with 3 parameters
Prelude> 0 `foldl (+)` [1..10]

<interactive>:14:10: parse error on input ‘(’
Prelude> let plus = (+)
Prelude> 0 `foldl plus` [1..10]

<interactive>:16:10: parse error on input ‘plus’

不行,但是这样

Prelude> let sumStartingAt = foldl (+)
Prelude> 0 `sumStartingAt` [1..10]
55

关于解释的Haskell数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com