Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 无限平方根';t匹配预期类型&;无法构造无限类型_Haskell_Ghci - Fatal编程技术网

Haskell 无限平方根';t匹配预期类型&;无法构造无限类型

Haskell 无限平方根';t匹配预期类型&;无法构造无限类型,haskell,ghci,Haskell,Ghci,抱歉,这可能是一个愚蠢的问题——目前正在努力学习哈斯克尔 我正在尝试构建一个基本函数,它将创建一个数字的无限平方根列表,这样我就可以练习take函数及其工作原理 我编写了以下代码 infisqrt x = infisqrt'((x :: Float) []) -- helper method infisqrt' x xs = infisqrt'(sqrt(x) (xs ++ [(sqrt(x))])) 但是,在尝试加载库时,返回时出现两个错误 :l isq isq.hs:1:24: Cou

抱歉,这可能是一个愚蠢的问题——目前正在努力学习哈斯克尔

我正在尝试构建一个基本函数,它将创建一个数字的无限平方根列表,这样我就可以练习take函数及其工作原理

我编写了以下代码

infisqrt x = infisqrt'((x :: Float) [])

-- helper method
infisqrt' x xs = infisqrt'(sqrt(x) (xs ++ [(sqrt(x))]))
但是,在尝试加载库时,返回时出现两个错误

:l isq

isq.hs:1:24:
Couldn't match expected type ‘[t0] -> a’ with actual type ‘Float’
Relevant bindings include
  infisqrt :: Float -> [a] -> t (bound at isq.hs:1:1)
The function ‘x :: Float’ is applied to one argument,
but its type ‘Float’ has none
In the first argument of ‘infisqrt'’, namely ‘((x :: Float) [])’
In the expression: infisqrt' ((x :: Float) [])

isq.hs:5:33:
Occurs check: cannot construct the infinite type: a ~ [a] -> a
Relevant bindings include
  xs :: [a] (bound at isq.hs:5:13)
  x :: a (bound at isq.hs:5:11)
  infisqrt' :: a -> [a] -> t (bound at isq.hs:5:1)
In the first argument of ‘sqrt’, namely ‘(x)’
In the first argument of ‘infisqrt'’, namely
  ‘(sqrt (x) (xs ++ [(sqrt (x))]))’

有人能告诉我这个错误在哪里吗?

Haskell函数调用不使用括号。看起来您正期待着:

infisqrt x = infisqrt'((x :: Float) [])
“将
x
[]
作为参数传递给
inifsqrt
”然而,对于编译器来说,它实际上意味着“将
[]
作为第一个参数传递给
x
,然后将结果传递给
infisqrt'
”。如果您去掉多余的括号,您应该开始获得牵引力:

infisqrt x = infisqrt' (x :: Float) []
(记住,在
infisqrt'
的定义中也有同样的事情发生)

作为旁注,通常最好将参数的类型放在函数类型声明中:

infisqrt :: Float -> [Float]
infisqrt x = infisqrt' x []

Haskell函数调用不使用括号。看起来您正期待着:

infisqrt x = infisqrt'((x :: Float) [])
“将
x
[]
作为参数传递给
inifsqrt
”然而,对于编译器来说,它实际上意味着“将
[]
作为第一个参数传递给
x
,然后将结果传递给
infisqrt'
”。如果您去掉多余的括号,您应该开始获得牵引力:

infisqrt x = infisqrt' (x :: Float) []
(记住,在
infisqrt'
的定义中也有同样的事情发生)

作为旁注,通常最好将参数的类型放在函数类型声明中:

infisqrt :: Float -> [Float]
infisqrt x = infisqrt' x []

Haskell函数调用不使用括号。看起来您正期待着:

infisqrt x = infisqrt'((x :: Float) [])
“将
x
[]
作为参数传递给
inifsqrt
”然而,对于编译器来说,它实际上意味着“将
[]
作为第一个参数传递给
x
,然后将结果传递给
infisqrt'
”。如果您去掉多余的括号,您应该开始获得牵引力:

infisqrt x = infisqrt' (x :: Float) []
(记住,在
infisqrt'
的定义中也有同样的事情发生)

作为旁注,通常最好将参数的类型放在函数类型声明中:

infisqrt :: Float -> [Float]
infisqrt x = infisqrt' x []

Haskell函数调用不使用括号。看起来您正期待着:

infisqrt x = infisqrt'((x :: Float) [])
“将
x
[]
作为参数传递给
inifsqrt
”然而,对于编译器来说,它实际上意味着“将
[]
作为第一个参数传递给
x
,然后将结果传递给
infisqrt'
”。如果您去掉多余的括号,您应该开始获得牵引力:

infisqrt x = infisqrt' (x :: Float) []
(记住,在
infisqrt'
的定义中也有同样的事情发生)

作为旁注,通常最好将参数的类型放在函数类型声明中:

infisqrt :: Float -> [Float]
infisqrt x = infisqrt' x []

一个次要的旁注:
Float
是一种特殊用途的类型,主要用于专门围绕它设计的算法,或者在某些情况下,大小比精度更重要。大多数情况下,您需要的浮点类型是
Double
。我已将此问题标记为结束。这个问题没有什么问题,但是将来犯这个错误的人不太可能发现它,他们最终会在做不同的事情的过程中收到不同类型的错误消息。一个次要的补充说明:
Float
是一种特殊用途的类型,主要用于专门围绕其设计的算法,或在尺寸比精度更重要的某些情况下。大多数情况下,您需要的浮点类型是
Double
。我已将此问题标记为结束。这个问题没有什么问题,但是将来犯这个错误的人不太可能发现它,他们最终会在做不同的事情的过程中收到不同类型的错误消息。一个次要的补充说明:
Float
是一种特殊用途的类型,主要用于专门围绕其设计的算法,或在尺寸比精度更重要的某些情况下。大多数情况下,您需要的浮点类型是
Double
。我已将此问题标记为结束。这个问题没有什么问题,但是将来犯这个错误的人不太可能发现它,他们最终会在做不同的事情的过程中收到不同类型的错误消息。一个次要的补充说明:
Float
是一种特殊用途的类型,主要用于专门围绕其设计的算法,或在尺寸比精度更重要的某些情况下。大多数情况下,您需要的浮点类型是
Double
。我已将此问题标记为结束。这个问题没有什么问题,但将来犯这个错误的人不太可能找到它。他们最终会在做不同事情的过程中收到不同类型的错误消息。这实际上是我第一次尝试做的-我开始添加paren,(从迭代编码的角度)认为它反而会使函数更显式,并给我带来更多“有意义的”错误。通过切换到,我已转到.hs加载
infisqrt x=infisqrt'(x::Float)[]——helper方法infisqrt'x xs=infisqrt'(sqrt(x))(xs++[(sqrt(x)))
——但现在每当我试图运行“take 4 infisqrt 8”时,我似乎陷入了无限循环。有什么想法吗?啊,是的。问题是您构造了
infisqrt'
来获取无限列表