簡體   English   中英

Haskell-無限列表-

[英]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 1soda 2soda 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM