Haskell - 无限列表 -

时间:2017-05-01 01:20:35

标签: list haskell infinite

我有这些数据和类型:

test.cpp:27:18: error: 'DoFunThings' marked 'override' but does not override any
      member functions
    virtual void DoFunThings ( C<T>* d ) override {}

我有这个口号:

“定义chuckNorris,谁是最初被称为”Chuck“的客户,有抵抗力1000,是Ana的朋友并且采取了宇宙中存在的所有苏打水,从1级苏打水开始,然后是2级苏打水,并且所以。“

我做:

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)

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

你会怎么写无限列表?

像苏打1,苏打2,苏打3 ........

2 个答案:

答案 0 :(得分:3)

我将其写为last modified timestamp

map soda [1,2..]有效地获取列表中的每个元素(1,2,3等)并对其应用map,从而生成另一个包含soda,{{1}的列表},soda 1等等。

答案 1 :(得分:3)

执行此操作的方法是通过map功能。步进1的无限列表可以使用..语法完成。

map soda [1..]

这在语义上等同于

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

这可行的原因归功于Haskell的懒惰评估。只有在你开始遍历无限列表时才会调用soda,所以不必担心会陷入无限循环。