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
List Haskell-无限列表-_List_Haskell_Infinite - Fatal编程技术网

List Haskell-无限列表-

List Haskell-无限列表-,list,haskell,infinite,List,Haskell,Infinite,我有以下数据和类型: data Cliente = Uncliente {nombre::String,resistencia::Int,bebidas::[Bebida],amigos::[Cliente]} deriving (Show) type Bebida = Cliente -> Cliente type Nombre = String type Duracion = Float type Acciones = [Bebida] type Itinerario = (N

我有以下数据和类型:

data Cliente = Uncliente {nombre::String,resistencia::Int,bebidas::[Bebida],amigos::[Cliente]} deriving (Show) 

type Bebida = Cliente -> Cliente 

type Nombre = String
type Duracion = Float
type Acciones = [Bebida]
type Itinerario = (Nombre,Duracion,Acciones)
我有一个口号:

“定义查克诺里斯,一个最初被称为“查克”的客户,拥有1000阻力,是安娜的朋友,他拿走了宇宙中存在的所有苏打水,从一级苏打水开始,然后是二级苏打水,依此类推。”

我确实:

chuckNorris = Uncliente {
    nombre = "Chuck",
    resistencia = 1000,
    bebidas = [soda 1,2..],
    amigos = [ana]
但这不起作用,因为无限量的饮料清单不是这样的

你会如何写无限列表


像苏打水1,苏打水2,苏打水3……。

我会把它写成
映射苏打水[1,2..]


map
有效地获取列表中的每个元素(1、2、3等)并将
soda
应用于该元素,从而生成另一个包含
soda 1
soda 2
soda 3
等元素的列表。

执行此操作的方法是通过
map
函数。无限列表,可以使用
语法执行步骤
1
语法

map soda [1..]
这在语义上等同于

[soda 1, soda 2, soda 3, {- and so on... -}]
这之所以有效,是因为Haskell的懒惰评估。对
soda
的调用只有在您开始遍历无限列表时才会发生,因此无需担心在这里陷入无限循环