F_n = 0 if n = 0
1 if n = 1
F_(n-1) + F_(n-2) if n >= 2
> take 10 fibs
[0,1,1,1,1,1,1,1,1,1]
> take 10 fibs
[0,1,1,2,2,3,3,4,4,5]
"Such a list comprehension returns the list of elements produced by evaluating e in the successive environments created by the nested, depth-first evaluation of the generators in the qualifier list."
==================== Desugar ====================
Rec {
$dNum_aaT :: GHC.Num.Num GHC.Num.Integer
[]
$dNum_aaT = GHC.Num.$f3
Fib.fibs :: [GHC.Num.Integer]
[Exported]
[]
Fib.fibs =
GHC.Base.:
@ GHC.Num.Integer
lit_a7r
(GHC.Base.:
@ GHC.Num.Integer
lit_a7t
(__letrec {
ds_dgu :: [GHC.Num.Integer] -> [GHC.Num.Integer]
[]
ds_dgu =
\ (ds_dgv :: [GHC.Num.Integer]) ->
case ds_dgv of ds_dgv {
[] -> GHC.Base.[] @ GHC.Num.Integer;
: ds_dgw ds_dgx ->
let {
x_a5G :: GHC.Num.Integer
[]
x_a5G = ds_dgw } in
__letrec {
ds_dgy :: [GHC.Num.Integer] -> [GHC.Num.Integer]
[]
ds_dgy =
\ (ds_dgz :: [GHC.Num.Integer]) ->
case ds_dgz of ds_dgz {
[] -> ds_dgu ds_dgx;
: ds_dgA ds_dgB ->
let {
y_a5I :: GHC.Num.Integer
[]
y_a5I = ds_dgA
} in GHC.Base.: @ GHC.Num.Integer (+_aaC x_a5G y_a5I) (ds_dgy ds_dgB)
};
} in ds_dgy (GHC.List.tail @ GHC.Num.Integer fibs_a7n)
};
} in ds_dgu fibs_a7n))
$dNum_aaV :: GHC.Num.Num GHC.Num.Integer
[]
$dNum_aaV = $dNum_aaT
+_aaC :: GHC.Num.Integer -> GHC.Num.Integer -> GHC.Num.Integer
[]
+_aaC = GHC.Num.+ @ GHC.Num.Integer $dNum_aaV
fromInteger_aaU :: GHC.Num.Integer -> GHC.Num.Integer
[]
fromInteger_aaU = fromInteger_aaS
lit_a7t :: GHC.Num.Integer
[]
lit_a7t = fromInteger_aaU (GHC.Num.S# 1)
fromInteger_aaS :: GHC.Num.Integer -> GHC.Num.Integer
[]
fromInteger_aaS = GHC.Num.fromInteger @ GHC.Num.Integer $dNum_aaT
lit_a7r :: GHC.Num.Integer
[]
lit_a7r = fromInteger_aaS (GHC.Num.S# 0)
fibs_a7n :: [GHC.Num.Integer]
[]
fibs_a7n = Fib.fibs
end Rec }
> take 10 fibs
[0,1,1,2,3,5,8,13,21,34]
"Parallel list comprehensions are a natural extension to list comprehensions. List comprehensions can be thought of as a nice syntax for writing maps and filters. Parallel comprehensions extend this to include the zipWith family."
-- fib4.hs
-- fibonacci sequence
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
原帖由 flw 于 2008-10-12 08:55 发表
我一般都是在 vim 里面调整好,然后复制上来。
只要 BBS 用的是等宽字体,并且发帖时使用了 code 标签,那么这样做一般可以保证对齐不变。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |