Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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-签名和类型错误_Haskell - Fatal编程技术网

Haskell-签名和类型错误

Haskell-签名和类型错误,haskell,Haskell,我是Haskell的新手,在函数签名和类型方面遇到了一些问题。我的问题是: 我试着制作一个列表,每个数字在1到999之间,可以被它自己的数字的每个数字所除。例如,数字280可以在该列表中,因为2+8+0=10和280/10=28。。。另一方面,123不能,因为1+2+3=6和123/6=20,5。当最后一个操作给你一个带小数点的数字时,它将永远不会在该列表中 这是我的密码: let inaHelper x = (floor(x)`mod`10)+ (floor(x/10)`mod`10)+(fl

我是Haskell的新手,在函数签名和类型方面遇到了一些问题。我的问题是:

我试着制作一个列表,每个数字在1到999之间,可以被它自己的数字的每个数字所除。例如,数字280可以在该列表中,因为2+8+0=10和280/10=28。。。另一方面,123不能,因为1+2+3=6和123/6=20,5。当最后一个操作给你一个带小数点的数字时,它将永远不会在该列表中

这是我的密码:

let inaHelper x = (floor(x)`mod`10)+ (floor(x/10)`mod`10)+(floor(x/100)`mod`10)
第一部分只计算一个数字的每个数字的和。 这部分是有效的

这是最后一部分:

let ina = [x | x <- [1..999] , x `mod` (inaHelper x) == 0   ]
这意味着只要
t
是一个整数类型(以及一些其他约束条件),结果就是我们想要的任何类型的列表
t

当我们要求GHCi打印结果时,GHCi需要选择
x
的类型,但不能明确决定。这是错误消息的状态

打印结果时,请尝试指定类型。例如

> ina :: [Int]

这将使GHCi选择类型
t
Int
,消除歧义。

它不会出现在您显示的代码中。您在GHCi提示符中还键入了什么?在Inaheloper之后,我键入了Inaheloper 280来测试程序,它显示了数字10。所以我觉得没问题。然后我为ina编写了代码,正如我前面所说的。接下来,在promptBtw
inaHelper
中写入的简单ina可以写入
sum。fmap(读。纯)。显示
,并且无论您的数字有多少位数都能正常工作。我想它可能与此类似。我尝试过,但它给出了其他错误:没有因使用'ina'而产生的(Integral int1)实例可能的修复:将(Integral int1)添加到表达式类型签名[int1]的上下文中:ina:[int]在“it”的等式中:it=ina:[int]@JoãoSantos您需要
int
,大写为
I
。ina:[int]:57:1:在“it”的等式中,表达式:ina:[int]中使用“ina”不会导致(RealFrac int)出现实例:it=ina:[int]@JoãoSantos现在的问题是,您使用的是仅用于浮点类型的
floor
/
,以及仅用于整型的
mod
。移除
floor
并使用
div
进行整数除法,例如
5`div`2
2
。您的代码中可能有其他问题,但慢慢地,您将能够解决所有问题。@JoãoSantos作为一般建议,如果您使用显式类型对每个全局定义进行注释,这将非常有帮助。否则,有时候,GHC会推断出一些非预期的通用类型,这些类型到目前为止确实会使代码编译,但在以后使用该定义时会产生问题。及早发现问题使问题更容易解决。
ina = [x | x <- [1..999] , x `mod` (inaHelper x) == 0   ]
> :t ina
ina :: (Integral t, ...) => [t]
> ina :: [Int]