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