0

我有一个接受列表和操作并在该列表上执行操作的函数。

-- SUMLIST function
sumList :: Num a => [a1] -> (a1 -> a) -> a
sumList numList oper = sum (map (oper) numList)

当我从 GHCI 提示符调用时,它工作正常:

sumList [1,2,3,4,5] (*3)
gives: 45

但我想在上面写一个包装器并从文件中传递值:{line is SUMLIST [1,2,3,4,5] (*3) }

let x = (splitOn " " line)
print (sumList (read (x!!1) :: [Int]) (x!!2) )

在这里,我可以输入第一个参数,它是列表,但是我应该为第二个参数做什么,这是实际映射 ,有人可以指导我正确的方向吗

4

1 回答 1

1

如果您只有一组预定义的可用操作(例如 .或其他) */那么最简单的方法是解析字符串,然后选择使用哪个函数来处理哪些值。

但是,如果您想让用户能够使用任何 haskell 表达式进行映射,那么事情就会变得更加困难。您可以使用 GHC API 动态加载和执行代码,但该 API 的文档很少。

于 2013-09-08T11:32:16.897 回答