我将此代码输入ghci
Prelude> filter snd [('a',True),('b',True),('c',False),('d',True)]
Run Code Online (Sandbox Code Playgroud)
为什么返回
[('a',True),('b',True),('d',True)]
Run Code Online (Sandbox Code Playgroud)
而不是
[('a',True),('c',False),('d',True)]
Run Code Online (Sandbox Code Playgroud)
snd函数返回第二个项目,那么为什么不filter snd过滤第二个项目呢?
我有类型卡,由花色和等级组成,
data Suit = A|B deriving (Show, Eq)
data Rank = 1|2 deriving (Show, Eq)
data Card = Card Suit Rank deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)
数据 Rank 函数似乎是错误的,因为 Int 不能是类型构造函数,以及如果我的卡片是 A1|B1|A2|B2 如何创建正确的函数
谢谢
一个猜谜游戏。每张卡都包含一个西装,A,B,C,D,E,F,G中的一个,以及一个等级,1 | 2 | 3中的一个。
我需要一个函数来保证input(String)是否为有效类型。并且还要编写一个实例声明,以使类型位于Show类中。
我不确定函数toCard,如何在函数中表达“字符串”并满足条件。
data Suit = A|B|C|D|E|F|G
deriving (Show , Eq)
data Rank = R1|R2|R3
deriving (Show, Eq)
data Card = Card Suit Rank
deriving (Show, Eq)
instance Show Card where show (Card a b)
= show a ++ show (tail show b)
toCard :: String -> Maybe Card
toCard all@(x:xs)
| (x=A|B|C|D|E|F)&&(xs==1|2|3) = Just Card
| otherwise = Nothing
Run Code Online (Sandbox Code Playgroud)
编辑toCard函数,输入应该是任何String,所以我使用了列表表达式,但是似乎不正确,因为我在ghci中尝试了它,(x = A | B | C | D | E | F)&&(y == 1 | …