2016-08-13 2 views
0

Wir kennen how to convert a String to an Integer für einen String wie "50". Angenommen, die Zeichenfolge ist "2^3", wie erhält man 8 daraus? Gibt es etwas, das funktioniert, wenn es nicht im Voraus bekannt ist, dass die Operation eine Macht ist, etwas, das auch für "2+3" usw. funktionieren würde?Angezeigte Leistung in einem String zu Integer

+3

Das klingt wie ein Parser. Was genau meinen Sie mit "* etc *", d. H. Was ist die Syntax, die Sie analysieren möchten? – melpomene

+0

@melpomene Ein elementarer Ausdruck, dessen Ergebnis eine ganze Zahl ist, wie a + b, a * b, a^b, a + b + c. –

+0

Sie suchen dafür: https://hackage.haskell.org/package/plugins-1.5.5.0/docs/System-Eval-Haskell.html – Sibi

Antwort

-2

Hum, könnten Sie versuchen QuasiQuotes für diesen Einsatz:

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

Schön, aber die Eingabe wird nicht als String angegeben. –

+2

Sie können das gleiche ohne TH tun: 'let a = 1 + 1' – melpomene

0

Soweit ich weiß, gibt es keine Ausdrucksauswertung in den Grund Haskell-Bibliotheken.

Funktioniert das für Sie?

import System.Process 

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

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

Aber es läuft in der IO-Monade und es ist nicht sehr robust.

+0

Ist es besser als https://hackage.haskell.org/package/plugins-1.5.5.0/docs/System-Eval-Haskell.html? –

+0

Es ist einfacher, erfordert keine Installation von zusätzlichen Bibliotheken, aber es ist nicht so leistungsfähig. Alles hängt von Ihren Anforderungen ab. – ErikR