2013-10-06 3 views
0

Я пытаюсь создать свой собственный тип данных, называемый «Cipher» в Haskell. Я понял, что есть 26! значения, которые может принимать тип (любая комбинация символов в алфавите используется один раз и только один раз).Создание собственного типа данных «Cipher» в Haskell

Я начал так:

данных Cipher = [ 'а' .. 'Z'] |

Я знаю, что Haskell может «угадывать» комбинации, но как я могу сказать, что я хочу, чтобы тип мог принимать любые значения, как указано выше?

+0

Cipher = A | B | C | ... и, возможно, вам нужно определить экземпляр чтения для этого, чтобы преобразовать из строки в этот тип данных. Или newtype Cipher = Cipher Char. Но это может принимать любой символ и не ограничивается использованием только тех символов, которые вы указали. – 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 
Смежные вопросы