, list
GHCi, , GHC, . :
list = 1 : tail list
main = print list
:
Loop: <<loop>>
primes
.
, GHC . , , , , Haskell .
, ( "" ) [1,1]
, , :
list = 1 : tail list
. , "" ( "" _|_
), , head [1,2,3]
1
.
(, , list
1 : _|_
, " ". , @Justin Li . , .)
, , , " ", Haskell ( , ) , , .
, , . list
[1]
? , "", n = 1 ( , ) tail list
, list
, n-1 = 0, [1]
, []
, , , ?
list = 1 : tail list
= 1 : tail [1] -- use list-so-far
= 1 : []
= [1]
()
list
() , Haskell ( . ).
, tail
, :
tail l = case l of _:xs -> xs
[] -> error "ack, you dummy!"
"" list
Haskell:
-- evaluating `list` using definition of `list`
list = 1 : tail list
-- evaluating `tail list` using definition of `tail`
list = 1 : case list of _:xs -> xs
...
-- evaluating case construct requires matching `list` to
-- a pattern, this requires evaluation of `list` using its defn
list = 1 : case (1 : tail list) of _:xs -> xs
...
-- case pattern match succeeds
list = 1 : let xs = tail list in xs -- just to be clear
= 1 : tail list
-- awesome, now all we need to do is evaluate:
list = 1 : tail list
-- ummm, Houston, we have a problem
- , " ".
. Haskell, Haskell. - , @luqui. , , " ", Haskell, , .