2014-10-22 84 views
0

我正嘗試使用let2nat和nat2let函數創建移位函數。 此移位功能將範圍從0到25的移位因子應用於範圍'a'到'z'的小寫字母。這個範圍以外的字符,如大寫字母和標點符號,應該返回不移位。確保你的功能環繞在字母表的末尾。Haskell錯誤不在範圍內:數據構造函數否則

module Kaan where 
import Data.Char 

let2nat :: Char -> Int 
let2nat x = (ord x) - 97 

nat2let :: Int -> Char 
m = ['a'..'z'] 
nat2let x = m !! x 

shift :: Int -> Char -> Char 
shift x y 
    | (x + let2nat y <= 25) && (x + let2nat y >= 0) = nat2let x + let2nat y 
    | (x + let2nat y) > 25 = nat2let (x+let2nat y) `mod` 25 
    | Otherwise = y 

main = do 
    print $ let2nat 'h' 

這就是我得到:不在範圍:數據構造Otherwise`

回答

5

結合命名otherwise用小寫ootherwise被定義爲與Prelude中的True相同。

順便提一下,任何以大寫字母開頭的數值構造函數都不是像otherwise這樣的正常綁定。

+0

我的不好。我剛開始學習它。謝謝。 – knrkn 2014-10-22 00:23:57

+2

你應該「接受」這個答案。 – 2014-10-22 03:03:07