gpt4 book ai didi

haskell - 如何更改函数签名

转载 作者:行者123 更新时间:2023-12-03 22:15:59 24 4
gpt4 key购买 nike

我是 Haskell 的初学者,现在正在尝试开发一个后缀计算器。以下是我目前的代码:

calcK :: String -> String
calcK = show calc

calc :: String -> [Double]
calc = foldl interprete [] . words

interprete s x
| x `elem` ["+","-","*","/","^"] = operate x s
| x `elem` ["inc","dec","sqrt","sin","cos","inv"] = operate2 x s
| x `elem` ["+all"] = [sum s]
| x `elem` ["*all"] = [product s]
| otherwise = read x:s
where
operate op (x:y:s) = case op of
"+" -> x + y:s
"-" -> y - x:s
"*" -> x * y:s
"/" -> y / x:s
"^" -> y ** x:s
operate2 op (x:s) = case op of
"inc" ->1 + x:s
"dec" -> (-1) + x:s
"sqrt" -> sqrt x:s
"sin" -> sin x:s
"cos" -> cos x:s
"inv" -> 1 / x:s

它仅适用于基本操作。但是,我开始意识到我需要将签名定义为

   String -> String

不是 String -> [Double]。所以 "1 2 +" 的计算结果应该是

  "[3.0]"

而不是

   [3.0]

如您所见,我已尝试在顶部执行 show ,但它似乎不起作用。我尝试将 show 添加到代码的其他位置,但仍然没有成功。

如果专家能就此提供一些建议,我们将不胜感激。提前致谢!

最佳答案

唯一的问题是您试图显示 calc 函数,而不是它的 result

calcK :: String -> String
calcK = show . calc

你想组合 showcalc,让 calc 产生一个 [Double] 然后传递显示

关于haskell - 如何更改函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915280/

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