【发布时间】:2018-11-30 00:15:33
【问题描述】:
这是我目前的代码:
data Suit = Diamond | Club | Heart | Spade
deriving (Read, Enum, Eq, Bounded)
data Rank = Two | Three | Four
| Five | Six | Seven | Eight | Nine | Ten
| Jack | Queen | King | Ace
deriving (Read, Enum, Eq, Ord, Bounded)
我正在尝试将每个值(无论是 Rank 还是 Suit)映射到一个唯一的素数。
primeMapper :: Either Rank Suit -> Int
应该是最后一个函数,我想遍历每个 Suit 并将其设置为前四个素数:
primeMapper [Diamond .. Spade] = [2,3,5,7]
并且每个 Rank 等于 17 号之前的其余素数:
primeMapper [Two .. Ace] = drop 4 . take 17 $ primes
假设我有一个名为 primes 的生成函数。
然而,这段代码显然会抛出错误,因为它从列表中生成了一个列表。我怎样才能实现我想要做的事情?让我知道我是否可以更好地解释它。
最终目标是拥有一个哈希表,根据素因数为每张牌赋予唯一的 ID,然后生成素因数分解并使用模数来快速比较扑克手牌。
【问题讨论】:
-
你有学习haskell的好资源(一本书)吗?你会想要加快模式匹配的速度。让你开始的东西:
primeMapper (Left Two) = undefined ; primeMapper (Right Diamond) = undefined ; ...etc。还阅读了 Enum 类