Hatena::Grouphaskell

mokeheheの日記

2009-08-02

Haskell風の関数呼び出しに変更する

関数定義はHaskell風に「関数名 引数 ... = 本体」だけど、関数呼び出しは数学やC言語などのように括弧+カンマ区切り、となってるので紛らわしい。なので関数呼び出しもHaskell風にスペース区切りで引数を渡すように変更する。

funcallOrVarrefで関数定義と変数参照をひとまとめにパースしていたのをそれぞれ分離して、factorは関数呼び出しか純factorとし、純factorは括弧つきの式かリテラルか変数参照とする:

factor :: MyParser Node
factor = try(funcall) <|> primFactor

primFactor :: MyParser Node
primFactor = parenedExpr <|> floatLiteral <|> varref <?> "factor"

関数呼び出しは名前に続いて1つ以上の引数で、引数は純factor:

funcall :: MyParser Node
funcall = do
	name <- identifier
	params <- many1 primFactor
	return $ Funcall name params

変数参照は名前のみ:

varref :: MyParser Node
varref = do
	name <- identifier
	return $ Ident name
トラックバック - http://haskell.g.hatena.ne.jp/mokehehe/20090802