gpt4 book ai didi

haskell - 我可以在运行时通过评估字符串来创建函数吗?

转载 作者:行者123 更新时间:2023-12-02 01:32:14 26 4
gpt4 key购买 nike

在我求解离散数学的程序中,我想让用户输入一串逻辑运算; 例如,如果用户输入let f (x:y:_) = x && y,那么我将得到一个函数f供使用在程序的其余部分。在 GHCi 中,我可以通过输入 let f (x:y:_) = x && y 轻松测试我的程序。

我不知道如何完成这个任务。我查看了eval来自 plugins 包的函数,但它似乎不是正确的函数。我可以在 Haskell 中执行此操作吗?

我计划使用它的代码是:

type TruthTable = [[Bool]]
type TruthTableResult = [([Bool], Bool)]

solveTable :: ([Bool] -> Bool) -> Integer -> (TruthTableResult)
solveTable f n = let table = truthTable n
result = map f table
in zipWith (\v r -> (v, r)) table result

最佳答案

没有标准的 Haskell 函数,因为 Haskell 是编译的,而不是解释的。但是,有些库允许您在运行时读取和编译 Haskell 代码。其中之一是hint 。您的案例示例:

import Control.Monad
import Language.Haskell.Interpreter

main = do
-- fExpr is a Haskell code supplied by your user as a String
let fExpr = "let f (x:y:_) = x && y in f"
-- Create an interpreter that runs fExpr
r <- runInterpreter $ do
setImports ["Prelude"]
interpret fExpr (const True :: [Bool] -> Bool)
-- run it and get an interface to the function
case r of
Left err -> putStrLn $ "Ups... " ++ (show err)
Right f -> do
print $ f [True, False]
print $ f [True, True]

更多可用示例here .

关于haskell - 我可以在运行时通过评估字符串来创建函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18821097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com