2016-08-13 8 views
0

"50"などの文字列の場合は、how to convert a String to an Integerがわかります。文字列が"2^3"であると仮定し、8を取得する方法は?操作が力であることがあらかじめわかっていないときに動作するものはありますか?"2+3"などでも動作するものはありますか?私の知る限り 基本的なHaskellライブラリで利用可能な式評価がありません知っているように整数を文字列に指定した場合

ghci> :set -XQuasiQuotes 
ghci> :set -XTemplateHaskell 
ghci> let a = [|1 + 1|] 
ghci> $a 
2 
ghci> 
+3

これはパーサーのようです。 "* etc *"とは具体的に何を意味しますか、つまり構文解析しようとしている構文は何ですか? – melpomene

+0

@melpomene a + b、a * b、a^b、a + b + cなどの整数を結果とする基本式です。 –

+0

あなたはこれを探しています:https://hackage.haskell.org/package/plugins-1.5.5.0/docs/System-Eval-Haskell.html – Sibi

答えて

-2

ハム、あなたは、このためにQuasiQuotesを使用することを試みることができます。

これは機能しますか?

import System.Process 

eval :: String -> IO Integer 
eval expr = do 
    r <- readProcess "ghc" ["-e", expr] "" 
    return (read r) 

main = eval "2^3" >>= print 

しかし、IOモナドで動作しますが、それほど堅牢ではありません。

+0

ニースですが、入力が文字列として与えられていません。 –

+2

THなしで同じことができます: 'let a = 1 + 1' – melpomene

0

+0

https://hackage.haskell.org/package/plugins-1.5.5.0/docs/System-Eval-Haskell.htmlよりも優れていますか? –

+0

これは簡単ですし、余分なライブラリをインストールする必要はありませんが、それは可能ではありません。それはあなたの要求に依存します。 – ErikR

関連する問題