Professional Documents
Culture Documents
DrDobbs ItsTimetoGetGoodatFunctionalProgramming20081203
DrDobbs ItsTimetoGetGoodatFunctionalProgramming20081203
ÿÿ!ÿ"#$%$&
'()*ÿ,-ÿ./01()ÿ02)3ÿ4ÿ-0*56,/*47ÿ89/:94;;,*:ÿ74*:04:)<ÿ24.ÿ,*ÿ5/77):)<ÿ0*7)22ÿ./01()ÿ3/*)ÿ-0*56,/*47ÿ89/:94;;,*:ÿ/*ÿ6=)ÿ>/?ÿ6/ÿ:)6
9)47ÿ@/9Aÿ3/*)<ÿ./019)ÿ7,A)7.ÿ6/ÿ-,*3ÿ6=46ÿ./09ÿ)B8)9,)*5)ÿ,*ÿ,;8)946,()ÿ/?>)56C/9,)*6)3ÿ89/:94;;,*:ÿ@,77ÿ7)43ÿ./0ÿ42694.ÿ,*ÿ);?945,*:
4ÿ-0*56,/*47ÿ89/:94;;,*:ÿ;,*32)6DÿE=)ÿ7)49*,*:ÿ509()ÿ,2ÿ26))8D
F/ÿ@=4612ÿ6=)ÿ?)26ÿ74*:04:)ÿ-/9ÿ)B87/9,*:ÿGH12ÿ?)*)-,62IÿJ6ÿ3)8)*32D
K)612ÿ24.ÿ./019)ÿ=)4(,7.ÿ,*()26)3ÿ,*ÿL4(4ÿ2A,772ÿ4*3ÿ6//72<ÿ4*3ÿ3/*16ÿ@4*6ÿ6/ÿ6/22ÿ42,3)ÿ6=)ÿ5/3)ÿ7,?949,)2<ÿ6=)ÿ2A,772<ÿ4*3ÿ6//72ÿ./0ÿ5/0*6
/*DÿE=)*ÿ./0ÿ2=/073ÿ64A)ÿ4ÿ7//Aÿ46ÿF5474D
F5474ÿ,2ÿ4ÿ;076,C84943,:;ÿ74*:04:)ÿ6=46ÿ,*6):946)2ÿ)22)*6,47ÿ-)4609)2ÿ/-ÿ,6)946,()ÿ/?>)56C/9,)*6)3ÿ89/:94;;,*:ÿ@,6=ÿ6=)ÿGHÿ84943,:;DÿJ6
5/;8,7)2ÿ6/ÿLMNÿ?.6)5/3)2O./0ÿ54*ÿ02)ÿL4(4ÿ7,?949,)2ÿ,*ÿ./09ÿF5474ÿ89/:94;2ÿ4*3ÿ,*=)9,6ÿ-9/;ÿL4(4ÿ57422)2DÿP/0ÿ3)8)*3ÿ/*ÿ'57,82)I
E=)9)12ÿ4ÿ870:C,*DÿF5474ÿ7)62ÿ./0ÿ,2/746)ÿ6=/2)ÿ84962ÿ/-ÿ./09ÿ5/3)ÿ6=46ÿ6907.ÿ*))3ÿ6=)ÿ?)*)-,62ÿ/-ÿGHÿ4*3ÿ@9,6)ÿ)()9.6=,*:ÿ)72)ÿ,*ÿL4(4D
Q76=/0:=ÿ6=)9)ÿ,2ÿ4ÿDR'Eÿ()92,/*<ÿF5474ÿ,2ÿ9)477.ÿ;499,)3ÿ6/ÿL4(4<ÿ=4(,*:ÿ?))*ÿ3)()7/8)3ÿ?.ÿN496,*ÿS?)92A.<ÿ/*)ÿ/-ÿ6=)ÿ3)2,:*)92ÿ/-
L4(4ÿ:)*)9,52ÿ4*3ÿ6=)ÿ406=/9ÿ/-ÿ6=)ÿ5099)*6ÿ>4(45ÿ9)-)9)*5)ÿ5/;8,7)9DÿJ612ÿ6=)ÿL4(4ÿ9/06)ÿ6/ÿGHDÿQÿ://3ÿF5474ÿ2,6)ÿ,2ÿ@@@D25474C74*:D/9:D
TUÿÿT%#VW#ÿ"#$%$&ÿXWÿYZ[\
S9ÿ7)612ÿ24.ÿ./019)ÿ4ÿDR'Eÿ3)()7/8)9<ÿ7,()ÿ4*3ÿ?9)46=ÿDR'E<ÿ:/ÿ6/ÿ477ÿ6=)ÿN,59/2/-6ÿ6)5=ÿ5/*-)9)*5)2<ÿ4*3ÿ@4*6ÿ6/ÿ)B87/9)ÿGHÿ@,6=,*ÿ6=)
2)509,6.ÿ4*3ÿ5/*()*,)*5)ÿ/-ÿ477ÿ./09ÿ-4;,7,49ÿ6//72DÿP/0177ÿ@4*6ÿ6/ÿ,*()26,:46)ÿN,59/2/-612ÿG]<ÿ9)5)*67.ÿ9)7)42)3ÿ-9/;ÿ6=)ÿ74?2ÿ4*3ÿ948,37.
694*2,6,/*,*:ÿ6/ÿ4ÿ-077.C2088/96)3ÿ-,926C57422ÿDR'Eÿ5,6,^)*DÿK,A)ÿF5474<ÿG]ÿ,2ÿ4*ÿSSH_GHÿ=.?9,3ÿ6=46ÿ7)62ÿ./0ÿ27,8ÿ,*6/ÿGHÿ5/3)ÿ@=)9)ÿ./0
*))3ÿ,6ÿ4*3ÿ26,5Aÿ@,6=ÿ-4;,7,49ÿ4889/45=)2ÿ)72)@=)9)D
G]ÿ@42ÿ3)2,:*)3ÿ28)5,-,5477.ÿ-/9ÿDR'Eÿ?42)3ÿ/*ÿ6=)ÿS`4;7ÿGHÿ74*:04:)aÿb/*ÿF.8)ÿ7)3ÿ6=)ÿ3)()7/8;)*6ÿ,*ÿ6=)ÿN,59/2/-6ÿc)2)495=
d9/08DÿJ6ÿ:,()2ÿ./09ÿGHÿ5/3)ÿ)42.ÿ455)22ÿ6/ÿDR'Eÿ7,?949,)2ÿ4*3ÿ6//72ÿ4*3ÿ,2ÿ,*6):946)3ÿ@)77ÿ@,6=ÿM,2047ÿF603,/D
e/6=ÿF5474ÿ4*3ÿG]ÿ=4()ÿ477ÿ6=)ÿ3)-,*,*:ÿ-)4609)2ÿ/-ÿGHÿ74*:04:)2fÿJ*6)*2)ÿ02)ÿ/-ÿ8466)9*ÿ;465=,*:<ÿ-0*56,/*2ÿ42ÿ-,926C57422ÿ(470)2<ÿ74^.
)(47046,/*Dÿ'45=ÿ:,()2ÿ./09ÿ5/3)ÿ6=46ÿ,;;064?,7,6.ÿ4*3ÿ2646)7)22*)22ÿ6=46ÿ./0ÿ*))3ÿ6/ÿ)B87/,6ÿ6=)ÿ;076,5/9)ÿ/88/960*,6.D
[#$ÿÿZWghWijWi k&kÿjjWl
F5474ÿ4*3ÿG]ÿ=4()ÿ6=)ÿ(,960)ÿ/-ÿ5/;?,*,*:ÿSSHÿ4*3ÿGHÿ84943,:;2ÿ4*3ÿ7)66,*:ÿ./0ÿ@43)ÿ,*6/ÿ6=)ÿGHÿ@46)92ÿ/*7.ÿ42ÿ3))87.ÿ42ÿ./0
*))3ÿ6/ÿ:/Dÿe06ÿ@=46ÿ,-ÿ./0ÿ@4*6ÿ6/ÿ3,()ÿ9,:=6ÿ,*IÿE=)*ÿ./0ÿ;4.ÿ@4*6ÿ6/ÿ)B87/9)ÿ'974*:D
'974*:ÿ,2ÿ4ÿ:)*)947C8098/2)ÿ74*:04:)ÿ4*3ÿ90*6,;)ÿ)*(,9/*;)*6ÿ28)5,-,5477.ÿ3)2,:*)3ÿ?.ÿL/)ÿQ9;269/*:ÿ46ÿ'9,522/*ÿ-/9ÿ?0,73,*:ÿ=,:=7.
849477)7<ÿ3,269,?06)3<ÿ-4076C6/7)94*6ÿ2.26);2DÿL/)<ÿ@=/ÿ;,:=6ÿ?)ÿ89)>03,5)3<ÿ2));2ÿ6/ÿ6=,*A2ÿ,612ÿ6=)ÿ*)B6ÿc0?.<ÿ4*3ÿ574,;2ÿ6=46ÿ,-ÿ./0
@9,6)ÿ4*ÿ4887,546,/*ÿ,*ÿ'974*:ÿ6/ÿ90*ÿ/*ÿ4ÿ2,*:7)C5/9)ÿ89/5)22/9<ÿ,6ÿ@,77ÿ90*ÿ-/09ÿ6,;)2ÿ42ÿ-426ÿ/*ÿ4ÿmC5/9)ÿ89/5)22/9ÿ@,6=/06ÿ4*.
;/3,-,546,/*ÿ,*ÿ6=)ÿ5/3)DÿQ*3ÿ=)ÿ89)2)*62ÿ3464ÿ6/ÿn47;/26oÿ5/*-,9;ÿ6=46D
'974*:ÿ,2ÿ*/6ÿ4ÿ=.?9,3ÿ7,A)ÿF5474ÿ4*3ÿG]<ÿ?06ÿ4ÿ*/C5/;89/;,2)2ÿ809)ÿGHÿ74*:04:)DÿJ6ÿ3/)2ÿ*/6ÿ=4()ÿp4ÿ`C7,A)ÿ2.*64Bÿ6/ÿ;4A)ÿ,6ÿ)42.ÿ6/
7)49*DpÿQ*3ÿ./0ÿ@/*16ÿ-,*3ÿ,6ÿ477ÿ6=46ÿ)42.ÿ6/ÿ7)49*DÿS*)ÿ'974*:ÿ89/:94;;)9ÿ@=/ÿ574,;2ÿ6/ÿ7/()ÿ6=)ÿ74*:04:)ÿ=42ÿ*)()96=)7)22ÿ?7/::)3
=,2ÿ-9026946,/*ÿ46ÿ6=)ÿ-456ÿ6=46ÿ'974*:ÿ=42ÿ6=9))ÿ3,--)9)*6ÿ)B89)22,/*ÿ6)9;,*46/92ÿ6=46ÿ49)ÿ5/*6)B6C3)8)*3)*6D
e06ÿ-/9ÿ6=)ÿ4887,546,/*2ÿ-/9ÿ@=,5=ÿ,6ÿ@42ÿ3)2,:*)3<ÿ'974*:ÿ,2ÿ3)7,()9,*:ÿ6=)ÿ://32Dÿ'9,522/*ÿ02)2ÿ,6ÿ-/9ÿ6)7)5/;ÿ2.26);2ÿ@/9Aÿ7,A)
5/*69/77,*:ÿ4ÿ2@,65=ÿ/9ÿ6)7)5/;ÿ4882<ÿ3464?42)ÿ4882<ÿ/9ÿJ*6)9*)6ÿ4882Dÿ'9,522/*12ÿQqbrstÿ89/>)56<ÿ4ÿ5/087)ÿ;,77,/*ÿ7,*)2ÿ/-ÿ'974*:ÿ5/3)<
=42ÿ45=,)()3ÿuuDuuuuuuuvÿ9)7,4?,7,6.Dÿw/@IÿpR/ÿ2=49)3ÿ2646)ÿ4*3ÿ4ÿ2/8=,26,546)3ÿ)99/9C9)5/()9.ÿ;/3)7<pÿL/)ÿ24.2D
kx&ÿÿTW%#!VW#ÿXWÿy&k&l
G,*477.<ÿ@=46ÿ,-ÿ./0ÿ>026ÿ@4*6ÿ6/ÿ7)49*ÿ6=,2ÿ3,--)9)*6ÿ@4.ÿ/-ÿ89/:94;;,*:IÿP/0ÿ0*3)9264*3ÿ6=46ÿ6/ÿ:)6ÿ9)477.ÿ://3ÿ46ÿ6=,*A,*:ÿ,*ÿGH
;/3)ÿ./0177ÿ*))3ÿ6/ÿ:/ÿ?45Aÿ6/ÿ25=//7ÿn-,:0946,()7.oDÿP/0ÿ@4*6ÿ4ÿ809)ÿn*/6ÿ=.?9,3oÿGHÿ)B8)9,)*5)ÿ4*3ÿ./0ÿ49)*16ÿ)B8)56,*:ÿ6/ÿ:)6
89/3056,()ÿ@/9Aÿ/06ÿ/-ÿ6=)ÿ)B87/946,/*DÿJ2ÿ6=)9)ÿ4ÿ?)26ÿ74*:04:)ÿ-/9ÿ2,;87.ÿ7)49*,*:ÿ-0*56,/*47ÿ89/:94;;,*:I
Qÿ://3ÿ542)ÿ54*ÿ?)ÿ;43)ÿ-/9ÿw42A)77D
Q6ÿ4ÿ;))6,*:ÿ,*ÿH/9674*3ÿ,*ÿtuz{<ÿ4ÿ:9/08ÿ/-ÿ89/:94;;)92ÿ3)5,3)3ÿ6=46ÿ6=)ÿGHÿ74*32548)ÿ@42ÿ:)66,*:ÿ7,66)9)3ÿ@,6=ÿ3,()9:)*6
4889/45=)2ÿ4*3ÿ;,*/9<ÿ3)43C)*3ÿ,;87);)*646,/*2<ÿ4*3ÿ6=46ÿ,6ÿ@42ÿ*)5)2249.ÿ6/ÿ-/9;ÿ4ÿ5/;;,66))ÿ6/ÿ3)2,:*ÿ4ÿ5/;;/*ÿ-0*56,/*47
89/:94;;,*:ÿ74*:04:)ÿ@,6=ÿ6=)ÿ:/47ÿ/-ÿ=4(,*:ÿ4ÿ2,*:7)ÿ-/0*346,/*ÿ-/9ÿGHÿ9)2)495=<ÿ)30546,/*<ÿ4*3ÿ89/;/6,/*ÿ/-ÿ-0*56,/*47
89/:94;;,*:DÿE=46ÿ74*:04:)ÿ@42ÿw42A)77<ÿ2/ÿ.)2<ÿw42A)77ÿ,2ÿ4ÿ54;)7ÿn4ÿ74*:04:)ÿ3)2,:*)3ÿ?.ÿ4ÿ5/;;,66))o<ÿ4*3ÿ,6ÿ,2ÿ472/ÿ4ÿ://3
74*:04:)ÿ-/9ÿ7)49*,*:ÿ477ÿ6=)ÿGHÿ)22)*6,472ÿ4*3ÿ6=)ÿ26.7)ÿ/-ÿ6=,*A,*:ÿ*))3)3ÿ-/9ÿ-0*56,/*47ÿ89/:94;;,*:D
w42A)77ÿ,2ÿ4ÿ*/C5/;89/;,2)2ÿ-0*56,/*47ÿ89/:94;;,*:ÿ74*:04:)ÿ7,A)ÿ'974*:DÿJ6ÿ89)2)*67.ÿ=42ÿ*/ÿ5/;;)95,47ÿ,;87);)*646,/*2Dÿe06ÿ@=,7)
,62ÿ428,946,/*2ÿ49)ÿ;/9)ÿ4543);,5ÿ6=4*ÿ5/;;)95,47<ÿ6=)9)ÿ49)ÿ2/;)ÿ,*6)9)26,*:ÿ4887,546,/*2ÿ/-ÿw42A)77DÿK,*28,9)ÿ02)2ÿw42A)77ÿ-/9ÿ2.26);
6//72ÿ3)()7/8;)*6<ÿ-/9ÿ)B4;87)<ÿ4*3ÿqN/*43<ÿ4ÿ@,*3/@ÿ;4*4:)9ÿ-/9ÿ6=)ÿqÿ|,*3/@ÿF.26);<ÿ,2ÿ@9,66)*ÿ)*6,9)7.ÿ,*ÿw42A)77Dÿw42A)7712
,*-70)*5)ÿ54*ÿ?)ÿ2))*ÿ,*ÿ6=)ÿKJR}ÿ-)4609)2ÿ/-ÿ`]ÿrDsÿ4*3ÿ)72)@=)9)D
01ÿ314ÿ5678ÿ91 8ÿ51 89ÿ6ÿÿ5678ÿ878ÿ 818ÿ89ÿ6468ÿÿ1ÿ6 ÿ1ÿ658 6 6ÿ4ÿ988ÿ58ÿ986ÿ58
95689ÿ91ÿ6 1ÿÿ64689ÿ9ÿ8 88ÿ58ÿ53ÿ616589ÿ56ÿ8ÿ314ÿ8!8ÿ314ÿ48ÿ9"989ÿ6ÿ11"9ÿ1
81 699ÿÿ6ÿ58ÿ48ÿÿ64689ÿ56ÿ8#48ÿ314ÿ1ÿ 178ÿ$43ÿ1ÿ58ÿ 1ÿ6ÿ869ÿ$1ÿ6ÿ 58ÿ163ÿ15
616589ÿ68ÿ889963ÿ6ÿÿ ÿ8ÿ889ÿ1ÿ 65ÿ51 ÿ59ÿ6ÿ639ÿ14ÿ%86498ÿ18ÿ 63ÿ1ÿ6158ÿ$416
16 ÿ9ÿ1ÿ58ÿ98
&ÿ()*+,-.ÿ/0,)1-
234567849:ÿ<=8>=9??74>ÿ74ÿ@96AB?96759
CDÿ()E-ÿF).-D
ÿ61ÿ1ÿ8ÿ6ÿ 5ÿ 658 6 6ÿ8!89919ÿ698ÿG1$6 ÿH898659ÿ658 6 6ÿ8789ÿ6ÿ1 88ÿ16
871 8ÿ658 6 69ÿ16 ÿ 18ÿ9ÿ8!8 83ÿ$8!8ÿ8ÿ314ÿ868ÿ 65I8 ÿ6619ÿ49ÿ966
1 846ÿ1J8I188ÿ6ÿ$416ÿ16 ÿ616589ÿK9ÿG1$6 9ÿL1ÿ M118ÿ8!69ÿNÿ58ÿ 19ÿ9 9
9898ÿ 8ÿ6ÿ198ÿ$416ÿ16 ÿ1ÿ8ÿ 58ÿ 8ÿ699ÿ$419ÿ69ÿ64 89ÿ1ÿ158ÿ$419N
1$6 1 O16 69O988699O88 86316 ÿP8ÿ58ÿ189ÿ1ÿ1ÿ951 ÿ51 ÿ8693ÿÿ9ÿ1ÿ87868ÿ58ÿ43ÿ1$
59ÿ1 8$4ÿ16 ÿ6165ÿÿ M1189ÿ8!6 8ÿ6ÿ1 14ÿ6 4 461ÿ1$ÿ889ÿ9ÿ6468ÿÿ 1ÿ89ÿ1$ÿ18
58ÿ$9ÿ8$89ÿ6ÿ6889ÿ$41ÿ49ÿ658 6 69ÿ$41ÿ936!Q
RSSTUVWXWYVZU[\]^ÿU`abcd