我在 Haskell 中实现 FP (Backus) 解释器时遇到问题。
FP 函数如下所示:
[+,*]:<2,3>
应该导致
<+:<2,3>, *:<2,3>> ->
<5,6>
这意味着左侧列表中的每个函数都应该在右侧列表的每个元素上执行。
我的理解是,我需要类似于“map”函数的东西,但是 map 在列表中应用一个函数,并且我需要在值列表中使用函数列表。
先感谢您!:-)
编辑:
由于我不准确,这是我的代码不起作用:
apply :: [String] -> [Integer] -> [Integer]
apply fs v = [((apply_f f x) | f <- fs | x <- v)]
apply_f :: String -> [Integer] -> [Integer]
apply_f "+" v = [(sum v)]
apply_f "*" v = [(product v)]
我不知道为什么... :-(
编辑2:
对不起,我整天工作太累了。问题是我不需要第二个管道,只需要第一个:
apply fs v = [ apply_f f v | f <- fs ]
现在,一切正常,非常感谢!:-)