私はHaskellの初心者で、ASCII値をシフトしてプレーンテキストを暗号化しようとしています。プレーンテキストに数字が含まれている場合は、数字の代わりに特殊記号を入れてエンコードする必要があります0 = *、1 = '\'、2 =〜、3 =!、4 = @、5 =#、6 = $、7 =%、8 = ^、9 = &)以下は私のコードです入力 `= 'で構文解析エラーが発生しましたか?
私はそれをコンパイルするとき、私はそれがencrypt2.hs:27:18: error:
parse error on input `='
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
|
27 | Where wrapshift = let shift' = ord(shift) `mod` 26
| ^
Failed, 0 modules loaded.
以下I kのようなエラーを示す、
wrapshift
機能を定義した(私はその犯人だと思う)が、している私の暗号化文字をラップアラウンドする これまで
import Data.Char
isInRange :: Char -> Char -> Char -> Bool
isInRange l u c = (c >= l) && (c <= u)
--is this Letter to be ciphered
canEncrypt :: Char -> Bool
canEncrypt c = isLower(c) && isAscii(c)
-should we wrap around the alphabet ?
wraparound shift c
| isLower c && ord(c)+shift > ord 'z' = True
| otherwise = False
--encrypt single char at a time
encryptChar :: Char -> Char -> Char
encryptChar :: Char -> Char -> Char
encryptChar shift c
| canEncrypt c = chr (ord c + wrapshift)
| isUpper c = c
Where wrapshift = let shift' = ord(shift) `mod` 26
in if (wraparound shift' c)
then shift'-26
else shift'
encryptChar _ '0' = '*'
encryptChar _ '1' = '\''
encryptChar _ '2' = '~'
encryptChar _ '3' = '!'
encryptChar _ '4' = '@'
encryptChar _ '5' = '#'
encryptChar _ '6' = '$'
encryptChar _ '7' = '%'
encryptChar _ '8' = '^'
encryptChar _ '9' = '&'
encryptChar _ c = c
encryptText :: String -> String -> String
encryptText text xs = [ encryptChar x s | x <- xs, s <- text]
とても良いです、私のソースファイルでtabs
のためにこれらの種類のエラーが発生しますが、私は合計ファイルをチェックしてミスを見つけませんでした。私はここで何か間違っていると思います。なぜこのエラーは、私を助けてください発生している私はここで打たれていますが
'wrapshift'は'どこでwrapshift' - 大文字小文字が重要なのでしょうか。 – chi
有用な回答を受け入れることを検討してください。答えを受け入れることによって、それは正しい答えであることを将来の読者に示すことになります。 – zaph
https://wiki.haskell.org/Keywords#where –