【问题标题】:Haskell - infinite list -Haskell - 无限列表 -
【发布时间】:2017-09-28 12:17:45
【问题描述】:

我有这些数据和类型:

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,是安娜的朋友,拿走了宇宙中存在的所有汽水,从1级汽水开始,然后是2级汽水,然后以此类推。”

我愿意:

chuckNorris = Uncliente {
    nombre = "Chuck",
    resistencia = 1000,
    bebidas = [soda 1,2..],
    amigos = [ana]

但这不起作用,因为无限的饮料清单不是那样的

你会如何写无限列表?

像苏打水 1、苏打水 2、苏打水 3 ........

【问题讨论】:

    标签: list haskell infinite


    【解决方案1】:

    我会写成map soda [1,2..]

    map 有效地获取列表中的每个元素(1、2、3 等)并将soda 应用于它,从而产生另一个具有soda 1soda 2soda 3 等的列表.

    【讨论】:

      【解决方案2】:

      执行此操作的方法是通过map 函数。通过1 可以通过.. 语法完成的无限列表。

      map soda [1..]
      

      这在语义上等价于

      [soda 1, soda 2, soda 3, {- and so on... -}]
      

      之所以可行,是因为 Haskell 的惰性求值。对soda 的调用仅在您开始遍历无限列表时发生,因此无需担心陷入无限循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 2013-03-13
        • 2012-10-04
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多