Posted on 2016/11/23, 12:13 AM By admin22
今話題のトランプ(?)をHaskellで操作してみました。Haskellとかレアな言語は使わないと忘れてしまうので、思いついた時に活用してみる意味も。
参考 : http://tune.hateblo.jp/entry/2015/05/12/023112
「Haskellでポーカーを作ろう〜第一回 リストのシャッフルとカードの定義〜」
環境 : Haskel for Mac ver 1.3.0 / macOS Sierra ver 10.12 (Macが修理から戻って新OSに)
この中で、一番興味深いのが32行目のリスト内包表記です。
このような集合を表現することで、トランプを操作できます。
これを応用して音楽などを表現するのも、面白そうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import System.Random.Shuffle import Data.List data Suit = Spd | Hrt | Clb | Dia deriving (Show, Read, Eq, Ord, Enum) data Card = Card Suit Int deriving (Eq, Ord) showCardNumber :: Int -> String showCardNumber 13 = "K" showCardNumber 12 = "Q" showCardNumber 11 = "J" showCardNumber 10 = "X" showCardNumber 9 = "9" showCardNumber 8 = "8" showCardNumber 7 = "7" showCardNumber 6 = "6" showCardNumber 5 = "5" showCardNumber 4 = "4" showCardNumber 3 = "3" showCardNumber 2 = "2" showCardNumber 1 = "A" instance Show Card where show (Card Spd i) = "S" ++ showCardNumber i show (Card Hrt i) = "H" ++ showCardNumber i show (Card Clb i) = "C" ++ showCardNumber i show (Card Dia i) = "D" ++ showCardNumber i allcd :: [Card] allcd = [ Card suit num | suit <- [Spd ..], num <- [1..13] ] cardSuit :: Card -> Suit cardSuit (Card s _) = s cardNumber :: Card -> Int cardNumber (Card _ n) = n |
シャッフルした結果や、並び替え、比較などいろいろ試してみました。
関数型言語の便利な一面を体験できる例だと思います。(素晴らしい参考サイトの記事です)
しかしながら、トランプ大統領の選挙結果を大きく外したデータサイエンティストの方々は、どんなことを今考えているのでしょうか。何十年ぶりとか過去に例がないことなど、やはり予測は難しいのでしょう。
Categories: 未分類 タグ: Haskell