gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:39:25 25 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 行中存在 parse error on input '='

有人知道怎么解决吗?

感谢您的回答。

最佳答案

我成功了:

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/

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