[英]Haskell - infinite list -
我有此数据和类型:
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)
我有这个口号:
“定义chuckNorris(最初被称为“ Chuck”的客户,抵抗力为1000)是Ana的朋友,从宇宙中吸收了所有苏打,从1级苏打开始,然后是2级苏打,依此类推。 “
我做:
chuckNorris = Uncliente {
nombre = "Chuck",
resistencia = 1000,
bebidas = [soda 1,2..],
amigos = [ana]
但这是行不通的,因为无限量的饮料不是那样的
您将如何编写无限列表?
像苏打1,苏打2,苏打3 ........
我把它写成map soda [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
的调用,因此无需担心会陷入无限循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.