gpt4 book ai didi

haskell - Haskell 中输入 `=' 解析错误

转载 作者:行者123 更新时间:2023-12-02 21:36:44 24 4
gpt4 key购买 nike

我在 Haskell 中编写了以下函数

coordenadas :: (Floating a) => String -> (a, a, a)
coordenadas linea = (x, y, z)
where (_ : xStr : yStr : zStr : _) = words linea
x = read $ tail xStr :: Float
y = read $ tail yStr :: Float
z = read $ tail zStr :: Float

此函数旨在接收像 "N1 X2 Y1 Z10" 这样的字符串并生成像 (2, 1, 10) 这样的元组,但是当我尝试编译它,编译器说 x = read $ tail xStr::Float 行中的输入 '=' 出现解析错误。

有谁知道怎么解决吗?

感谢您的回答。

最佳答案

我成功了:

coordinates :: String -> (Float, Float, Float)
coordinates line = (x,y,z)
where (_ : xStr : yStr : zStr : _) = words line
x = read $ tail xStr :: Float
y = read $ tail yStr :: Float
z = read $ tail zStr :: Float

main = do
let line = "test x1.0 y1.0 z1.0 test"
print $ coordinates line

这将按预期输出 (1.0, 1.0, 1.0)

我自己对 Haskell 有点陌生,所以我不知道为什么它对缩进如此挑剔(并且希望比我了解更多的人提供指导!),但显然正确的做法是:

  • 按 Tab其中再次按 Tab,然后键入第一行
  • 按 Tab 键 3 次,然后将后面的行与该行对齐

(注意:在我的编辑器中,“制表符”是“4 个空格”,而不是制表符)

编辑:我想我刚刚弄清楚为什么很难在我这边排队:语法突出显示!我的编辑器将“where”加粗,这使得它更宽,这使得正确的缩进看起来不正确。实际上,我通过关闭突出显示来确认这一点,只要线条彼此对齐,它似乎就可以工作。

这也意味着这种方式可能会避免类似的问题:

coordinates :: String -> (Float, Float, Float)
coordinates line = (x,y,z)
where
(_ : xStr : yStr : zStr : _) = words line
x = read $ tail xStr :: Float
y = read $ tail yStr :: Float
z = read $ tail zStr :: Float

关于haskell - Haskell 中输入 `=' 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199840/

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