2016-10-03 76 views
-1

我有回到这种形式插件组到构造哈斯克尔

[1.2,1.3,2.3] 

的阵列功能,我创建的数据:

data SpecielNumber = SP Float Float Float 

我怎样才能从foo函数返回数生成SpecielNumber

这样的事情不工作:(

x=[1.2,1.3,2.3] 
    SP x 

感谢

回答

2

希望,这些都会提供一些线索。你应该读更多...

> data SpecielNumber = SN Float Float Float deriving (Show) 
> let makeSN [x,y,z] = SN x y z 

> makeSN [1.2,1.3,2.3] 
SN 1.2 1.3 2.3 
+0

哦,我明白了..谢谢 – Alon

3

首先,[1.2, 1.3, 2.3]不一个数组,它的一个列表。

二,你的数据类型SpecialNumber需要一个构造函数名称。所以,你可以让它有这样的构造函数中的列表:

data SpecialNumber = SpecialNumber [Float] 

第一SpecialNumber是类型的名称。第二个是构造函数的名称。这些是不同的名称空间。这是传统的有两个比赛,除非你要定义一个类有不同的变种,如:

data Either a b = Left a | Right b 

LeftRight是替代构造和类型称为Either

+1

答案的一半讨论了一个旁边的命名约定的轻微。对于单个数据构造函数与类型构造函数具有相同的内容是很常见的,这两者总是可以通过上下文区分开来,并将其留在那里。 – chepner