gpt4 book ai didi

Haskell:在哪里输入 ‘=’ 解析错误

转载 作者:行者123 更新时间:2023-12-01 09:44:03 25 4
gpt4 key购买 nike

我是 Haskell 的新手,在 Haskell 中练习算法,请遵循“Pearls of Functional Algorithm Design”一书

这是找到不在给定有限自然数集合 X 中的最小自然数的算法

import Data.List
import Data.Array

minfree xs = if null ([0..b-1] \\ us)
then head ([b..] \\ vs)
else head ([0..b-1] \\ us)
where (us, vs) = (partition (<b) xs)
b = div (length xs) 2

Pff 这样的编译器错误

Prelude Data.Array Data.List> :load 01_the_smallest_free_number.hs 
[1 of 1] Compiling Main ( 01_the_smallest_free_number.hs, interpreted )

01_the_smallest_free_number.hs:11:29: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
|
11 | b = div (length xs) 2
| ^
Failed, no modules loaded.

显然添加let之前 b不是我尝试过的正确答案。

然后我全部替换bdiv (length xs) 2这行得通,所以似乎这是问题所在,但我不明白

最佳答案

这是错误的缩进:

     where (us, vs) = (partition (<b) xs)
b = div (length xs) 2

由于第二个相等比第一个缩进更多,它延续了第一个,就好像我们写的一样

     where (us, vs) = (partition (<b) xs) b = div (length xs) 2

触发错误。

你反而想要:

     where (us, vs) = (partition (<b) xs)
b = div (length xs) 2

这样两个方程式的缩进方式相同。

关于Haskell:在哪里输入 ‘=’ 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53246799/

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