2013-10-06 83 views
0

我想在Haskell中創建自己的數據類型,稱爲「Cipher」。我意識到有26!類型可以採用的值(字符串中字符的任意組合,只能使用一次)。在Haskell中創建我自己的數據類型「Cipher」

我有這樣開始的:

數據密碼= [ 'A' .. 'Z'] |

我知道Haskell可以「猜測」組合,但我怎麼能告訴它我希望類型能夠採取上述任何值?

+0

數據密碼= A | B | C | ...然後可能你需要定義讀取實例來將字符串轉換爲這種數據類型。或newtype Cipher =密碼字符。但是,這可以採取任何字符,並不僅限於使用您指定的那些字符。 – Satvik

+0

你會在'Cipher'上做什麼樣的操作? – jberryman

回答

1

一個簡單的答案可能是

import Data.Char (ord) 
import Data.List (permutations) 
newtype Cipher = Cipher String 

ciphers = map Cipher . permutations $ ['a' .. 'z'] 

-- Lookup a characters value in the cipher 
mapChar :: Cipher -> Char -> Char 
mapChar ciph c = ciph !! ord c - ord 'a' 

encode :: Cipher -> String -> String 
encode ciph = map (mapChar ciph) 

decode :: Cipher -> String -> String 
decode -- Ill let you figure this out 
相關問題