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
的调用只有在您开始遍历无限列表时才会发生,因此无需担心在这里陷入无限循环