2017-05-01 9 views
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) 

그리고이 슬로건이 있습니다

척 ""처음에 호출 된 고객 인 척 노리스를, 정의는 "저항이 1000은 아나의 친구이고, 우주에 존재하는 모든 음료수를 가져갔습니다. 레벨 1 탄산 음료부터 레벨 2 탄산 음료까지. "

와 내가 할 :

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

그러나 음료의 무한한 목록

가 어떻게 무한 목록을 작성합니다 그렇게되지 않기 때문에이 작동하지 않는 이유는 무엇입니까? map soda [1,2..]

map 효과적으로리스트의 각 요소를 필요로 소 1 소 2 3 ........ 소다

답변

3

그것을 쓰는 것 (1, 2, 3, 등등) soda을 적용하면 soda 1, soda 2, soda 3 등의 다른 목록이 생성됩니다.

3

이 작업을 수행하는 방법은 map 함수를 사용하는 것입니다. 단계로 이루어진 무한 목록은 .. 구문으로 수행 할 수 있습니다.

map soda [1..] 

이것은

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

이 하스켈의 게으른 평가 덕분에 작동하는 이유는 같은 의미 상 동일합니다. soda에 대한 호출은 무한 목록을 탐색하기 시작할 때만 발생하므로 여기서 무한 루프에 걸릴 염려가 없습니다.