私は現在「自分で48時間以内にスキームを書く」と読んでいました。第2章では、シンボルを認識し、パーサーを呼び出すための関数 'readExpr'を定義するための単純なパーサー 'シンボル'私はいくつかのテストをしようとすると、Haskellはシンボルを認識するための単純なパーサを定義しました。いくつかのテストに失敗しました
module Main where
import System.Environment
import Text.ParserCombinators.Parsec hiding (spaces)
main :: IO()
main = do args <- getArgs
putStrLn (readExpr (args !! 0))
symbol :: Parser Char
symbol = oneOf "!$%&|*+-/:<=?>@^_~#"
readExpr :: String -> String
readExpr input = case parse symbol "lisp" input of
Left err -> "Not Found" ++ show err
Right val -> "Found value" ++ show val
は、しかし:
>>> ghc -package parsec -o hii C1.hs
>>> ./hii *
それは言う:
はまたNot Found"lisp" (line 1, column 1):
unexpected "A"
、また&や#のようないくつかの他の記号は仕事と「インデックスを与えることはありません大きすぎるエラー '。しかし、以下のような記号:%、@ ,!これらは適切に機能します。 いくつかのシンボルはなぜ機能しないのかわかりません。また
、私はそのシンボルの上に引用符を追加した場合:
./hi "#"
Found value'#'
は今、すべての記号は仕事...
私は本当に精通していないよので、誰かが私にこれらを説明していただけますモナドのもの?
、それは拡張がシェルによって行われていることを指摘すると良いでしょう、とHaskellのとは全く無関係です。 Haskellプログラムは決して '*'を見ることはできませんが、その拡張だけです。 'echo commandWithFunnyChars'を使用することで、拡張を見るのに役立つこともあります。 – chi