D EPTH FI RST SEARCH
AN TARA FUN GSI ON AL D AN I M PERATI F
SUYAN TO
Fa k u lt a s M a t e m a t ik a D a n I lm u Pe n ge t a h u a n Ala m Ju r u sa n M a t e m a t ik a
Un iv e r sit a s Su m a t e r a Ut a r a
Abst r a k
Beber apa sifat dasar dar i pem r ogr am an secar a fungsional seper t i ket er sediaan fungsi- fungsi ber or de t inggi ( higher - or der funct ions) dan sifat lazy evaluat ion, m enj anj ikan pendekat an bar u dalam r ekayasa per angkat lunak dengan banyak kem udahan baik dalam r ase disain dan im plem ent asi ( r apid pr ot o t yping) m aupun dalam fuse penget esan dan pelacakan kesalahan yang pada akhir nya ak an m engur angi biaya pem r ogr am an. Nam un dem ikian ada pendekat an dasar yang ber beda yang digunakan pada pem r ogr am an fungsional dibandingkan pem r ogr am an im per at if yang sudah m em ber ikan banyak kont r ibusi pada per kem bangan dan k em aj uan aplik asi k om put er sepert i y ang sudah kit a r asakan hingga sekar ang ini. Per bedaan t er sebut bukan hanya per bedaan pada sint aks pem r ogr am an t et api lebih dar i it u adalah per bedaan dalam ker angka ber fik ir. Dengan m encoba m ener apkan algor it m a gr aph, lebih khususnya DFS pada kedua pendekat an t er sebut , paper ini ber m aksud unt uk m em ber ikan beber apa ar ahan dan per spekt if pada par a pem r ogr am yang ber asal dar i kom unit as im per at if unt uk dapat j uga m elakukan elabor asi dar i kem am puan bahasa fungsional.
1 . Pe n da h u lu a n
Pem r ogr am an Fungsional disebut dem ikian kar ena m em ang dalam sebuah pr ogr am selur uhnya hanya t er diri dar i fungsi- fungsi. Progr am ut am a it u sendir i dit ulis sebagai fungsi yang m ener im a m asukan pr ogr am sebagai ar gum ent dan m enghasilkan keluar an pr ogr am sebagai r esult . Biasanya pr ogr am ut am a didefinisikan dalam fungsi- fungsi ber or de t inggi, dan fungsi- fungsi t er sebut didefinisikan dalam fungsi- fungsi lain yang m em punyai orde lebih r endah, dem ikian set erusny a hingga pada lev el y ang paling rendah y ait u language prim it iv es.
Kar akt er ist ik dan keunt ungan pem r ogr am an fungsional ser ing dir angkum sebagai ber ikut . Pem r ogr am an fungsional t idak m engandung pem yat aan assignm ent s, sehingga var iabel- var iabelnya, sekali diber i har ga t idak akan per nah ber ubah. Dengan dem ikian secar a um um pem r ogr am an fungsional sam a- sekali t idak m engandung side- effect s. Suat u pem anggilan fungsi t idak m em puny ai efek selain penghit ungan hasilny a. Hal ini m engelim inasi peny ebab ut am a adany a bugs dan sem ua hal yang m em buat ur ut an pengeksekusian m enj adi t idak r elevan kar ena t idak per nah ada side- effect yang dapat m er ubah har ga dar i suat u ekspr esi, sehingga dapat dievaluasi kapan saj a kit a m at i. Hal ini m em bebaskan pem rogram dari beban unt uk m endefinisik an flow of cont rol.
Per kem bangan t er akhir dibidang kom put asi t eorit is, khususnya dibidang t ype t heor y dan cat egory t heor y, t elah m enyar ankan pendekat an bar u yang m em ungkinkan unt uk m engint egr asikan kelebihan- kelebihan dar i bahasa m ur ni dan t idak m ur ni yait u dengan m enggunakan m onads ; yang m engint egr asik an efek- efek im pur e kedalam bahasa fungsional yang pur e.
Gofer adalah envir onm ent ( dengan kat a lain, sebuah int er pr et er ) unt uk pem r ogr am an pur e fungsional yang pada pr insipnya sam a dan dalam beber apa hal ber usaha m enir u Haskel com piler. Tet api t idak sepert i Hask el y ang k om ersial, Gofer m er upakan pr ogr am publik . Pener apan DFS fungsional dalam paper ini dit ulis dalam Gofer dan DFS im per at if dit ulis dengan C.
2 . Algor it m a Gr a ph
Algor it m a gr aph t idak m em punyai sej ar ah yang m engunt ungkan dalam bahasa fungsional yang pur e. Belum sem uanya t er j elaskan seper t i m isalnya bagaim ana car a unt uk m engekspresikan algor it m a t anpa m enggunakan side- effect s unt uk m eningkat k an efisiensi dan bahasa yang ber sifat lazy ,yang secar a alam i m enghindari side- effect s t er sebut . Menur ut Launcbur r y, r epr esent asi gr aph yang sudah dlakukan or ang secar a m ur ni t er kadang lebih bur uk dibandingkan dengan represent asiny a dalam secara im perat if t r adisional, baik dalam uk uran graph ( m enj adi kuadr at ik) m aupun com pact ness dar i pr ogr am . Oleh kar ena it u ia m anaw ar kan pendekat an bar u dalam pener apan algor it m a gr aph secar a fungsional dim ana pendekat an t er sebut dipakai sebagai acuan pada paper ini.
Per hat ian kit a pusat kan pada algor it m a DFS. Algor it m a DFS per t am a kali diper kenalk an oleh Tar j an dan Hopcr oft 20 t ahun yang lalu. Mer eka m enunj ukkan bagaim ana DFS dapat digunakan unt uk m engkonst r aksikan sej ur nlah algor it m a gr aph yang efisien. Dalam pr akt eknya hal ini dilakukan dengan m enem pelkan code fr agm ent s yang dibut uhkan unt uk algor it m a t er sebut kedalam pr osedur DFS sehingga dapat kit a dapat m enghasilkan inform asi y ang relev an k et ik a penelusur an/ pencar ian ( sear ch) ber langsung. Walaupun pendekat an im per at if t r adisional t er sebut diat as cukup elegan t er nyat a pendekat an t er sebut m em punyai beber apa kelem ahan. Per t am a, kode pr ogr am DFS j alin- m enj alin ( int er t w inned) dengan kode pr ogr am dar i algor it m a yang gr aph t ert ent u ( rnisalnya colour ing/ pew ar naan edges) sehingga program m enj adi m onolit ik. Kode program t idak dibangun dengan kom ponen- kom ponen yang dapat digunakan kem bali ( r e-use) , dan t idak ada pem isahan ant ar a r ase- r ase yang sebenarnya secar a logis t er pisah. Kedua, unt uk dapat m enur unkan algor it m a DFS, kit a har us m engasum sikan suat u pr oses dinam ik apa dan kapan sesuat u t er j adi dan pem ikir an seper t i it u adalah sangat kom pleks.
Kadang- kadang, DFS for est diper kenalkan dalam r angka unt uk m enyediakan sebuah harga st at ic unt uk m em bant u penalar an. Kit a m em bangunnya diat as ide t er sebut . Jika kit a m em punyai suat u DFS for est yang eksplisit , adalah m em bant u penalar an kit a, m aka selam a over heads m asih dapat dit er im a, hat t er sebut baik unt uk pem r ogr am an. Pada paper ini kit a m enyaj ikan beber apa algor it m a DFS sebagai kom binasi dar i kom ponen- kom ponen st andar, m elew at kan har ga- har ga int erm ediat e dari sat u fungsi k e fungsi lain secara ek splisit , dan hasilny a adalah t ingk at m odularit as y ang lebih baik dibanding algor it m a t radisional.
2 .1 Re pr e se n t a si Gr a ph Adj a ce n cy List s
Kit a m er epresent asikan gr aph sebagai im m ut able array , y ang diindek s dengan vert eks- ver t eksnya, dim ana set iap kom ponen dar i ar r ay adalah sebuah list dari v ert ek s- v ert ek s yang 'reachable' sepanj ang edge t unggal. Hal ini m em berik an w ak t u pengak sesan y ang k onst an.
Gr aph dapat dipandang sebagai sebuah t abel yang diindeks oleh ver t eks-ver t eks.
t ype Table a = Ar r ay Ver t ex a t ype Gr aph = Table [ Vert ex]
Tipe dar i Ver t ex dapat ber upa sebar ang t ipe yang dipunyai oleh kelas indeks I x dar i Gofer, sepert i I nt , char, t uples of indices, dan lain- lain. Unt uk saat ini k it a ak an m engasum sikan :
t ype Ver t ex = Char
Kit a akan m em buat penyeder hanaan asum si bahw a ver t eks- vert eks dar i gr aph adalah t ipe k ont inyu ( m isalny a angka dar i 0 - 59, at au kar akt er dar i 'a' sam pai 'z' dan lain- lain) . Jika t idak m aka suat u fungsi hash har us dipakai unt uk pem et aan. Kar ena kit a m engasum sikan kont inuit as, biasanya kit a akan m er epr esent asikan list of ver t ices dengan sebuah pasangan t it ik t epi :
t ype Bounds = ( Ver t ex, Ver t ex)
ar r ay pada Gofer dilengkapi dengan oper at or pengindeksan ( ! ) dan fungsi- fungsi : indices ( m engem balik an sebuah list dar i indeks- indeks) dan bounds ( yang
m engem balikan sebuah pasangan indeks t erk ecil clan indek s t erbesar) .
Unt uk m em anipulasi t abel- t abel ( t er m asuk gr aphs) kit a m endefinisikan suat u fungssi num er ik gener ik yat u m apT yang m engaplik asikan ar gum en fungsiny a pada set iap t abel pasangan indeks/ ent r y, dan m encipt akan t abel bar u.
m apT : : ( Ver t ex - > a - > b) - > Table a - > Table b
m apT f t = ar r ay ( bounds t ) [ v : = f v ( t ! v) ⏐v < - indices t ]
fungsi ar r ay dar i Gofer m engam bil t epi- t epi at as dan baw ah dan sebuah list dar i pasangan indeks/ har ga, dan m em bangun array dariny a dalam w at u y ang linier.
Akhir nya, kadang- kadang ber guna unt uk m ent erj em ahk an sebuah list berurut an dalam look - t ip- t able y ang m em perlihat k an posisi dar i v ert ex dalam list . Unt uk keper luan kit a dapat m enggunak an fungsi t abulat e:
Tabulat e : : Bounds - > [ Ver t ex] - > Table I nt Tabulat e bnds vs = ar r ay bnds ( zip vs [ i ..] )
yang m er ingkas ver t eks- ver t eks ber sam a dengan bilangan bulat posit if 1,2,3,... dan m em bangun sebuah ar r ay dar i angka- angka t er sebut ( dalam w akt u t inier ) , yang diindeks oleh ver t eks- ver t eksnya.
2 .2 . Edge s
adalah spar se, kit a j uga per lu m enget ahui pasangan- pasangan vert eks it u secar a t er pisah.
t ype VE = ( Bounds, [ Ver t eks : = Ver t eks ] ) edges : : Graph - > VE
edges g = ( bounds g, [ v: = w ⏐ v < - indices g, w < - g! v] )
Unt uk m em bangun sebuah gr aph dar i sebuah list of edges k it a m endefinisik an sebuah fungsi
BuildG.
BuildG : : VE - > Graph
BuildG ( bnds,s) = accum Ar r ay snoc [ ] bnds es w here snoc x s x = x : xs
2 .3 Ope r a si- ope r a si se de r h a n a
Unt uk m enem ukan im m ediat e sucessor s dari sebuah ver t eks dalam sebuah gr aph g kit a secar a seder hana akan m enghit ung g ! v, yang m engem balikan a list of ver t ices.
M e n t r a n spose gr a ph
Menggabungkan fungsi edges dan buildG m em berik an k it a cara unt uk m em balik sem ua edges dalar n sebuah gr aph dengan fungsi t r asposeG :
t r ansposeG : : Gr aph - > Gr aph
t ransposeG g = buildG ( v s, ( w : = v < - es] ) w her e ( vs,es) = edges g
kit a m engekst r ak edges dar i gr aph or isinil, m em balik ar ahnya dan m em bangun kem bali gr aph dengan edges yang bar u.
Ou t D e gr e e da n I n D e gr e e
Menggunakan m apT kit a dapat m endefinisik an,
out degr ee : : Gr aph - > Table I nt out degr ee g = m apT num Edges g
w her e num Edges v w s = lengt h w s
yang m em bangun sebuah t abel yang t er diri dar i j um lah edges yang keluar dar i sebuah ver t eks.
Dengan m enggunakan t r ansposeG kit a dapat secar a cepat m endefinisikan sebuah t abel indegr ee unt uk ver t ek s- ver t eks :
indegr ee : : Gr aph - > Table I nt
lindegr ee g = out degr ee ( t r ansposeG g)
3 . D FS
ver t eks yang t idak puny a edges yang m engant ar kit a ke ver t eks- ver t eks lain yang belum dik unj ungi. Pada saat ini k it a back t rack clan m ener uskan dari ver t eks t er akhir yang m engant ar kan kepada ver t eks yang belum dikunj ungi.
Akhir nya kit a akan m encapai sebuah t it ik dim ana set iap ver t eks yang 'r eachable' dar i ver t eks aw al sudah dikunj ungi sem ua. Jika m asih ada ver t eks yang t ersisa, k it a pilih sat u dan m em ulai pencar ian lagi, sam pai akhim y a set iap vert eks sudah dikunj ungi sekali, dan set iap edge sudah diuj i.
Pada paper ini yang m engacu kepada peker j aan Launchbur r y, kit a m engkonsent r asik an pada DFS yang lebih sebagai sebuah spesifik asi unt uk sebuah har ga ( value) dar ipada sebagai sebuah proses. Har ga yang dispesifikasi adalah spanning for est yang didefinisikan oleh sebuah DF t r aver sal dar i sebuah gr aph, yakni sebuah sub- gr aph t er t ent u dar i gr aph aslinya yang ket ika m engandung sem ua ver t eks, biasanya m enghilangkan banyak edges.
3 .1 Spe sifik a si da r i D FS
Sebagai pendekat an pada algor it m a DFS yang kit a eksplor dalam paper ini adalah unt uk m em anipulasi dept h- fir st for est secar a eksplisit , t ahap per t am a adalah m engkonst r uksi dept h- fir st for est dar i sebuah gr aph. Unt uk m elakukan hal t er sebut kit a m em but uhkan definisi t r ees dan for est s.
Sebuah forest adalah a list s of t rees, dan sebuah t r ees adalah sebuah node yang m engandung beber apa value, ber sam aan dengan sebuah for est dar i sub- t r ees. Baik t rees m aupun forest s keduanya polim orphic dalam t ipe dari dat a yang boleh m er eka kandung.
Dat a Tree a = Node a ( Forest a) t ype For est a = [ Tr ee a]
Sebuah DFS dar i sebuah graph m engam bil suat u gr aph dan sebuah ur ut an aw al ver t eks- ver t eks. Sem ua ver t eks dalam graph dalam ur ut an aw alnya akan m enj adi t he r et urn for est .
dfs : : Graph - > [ Vert ex ] - > Forest Vert ex
fungsi ini m erupak an int i dari bahasan ini.
3 .2 . I m ple m e n t a si D FS
Dalam r angka m ener j em ahkan sebuah gr aph m enj adi sebuah dept h- fir st spanning t ree kit a m enggunakan suat u t eknik um um yang digunakan dalam pem r ogr am an fungsional yang bersifat lazy: gener at e t hen pr une. Diber ikan sebuah gr aph dan a list of ver t ices, per t am a kit a akan m en - gener at e sebuah for est ( m ungkin saj a infinit e) yang t er diri dar i sem ua ver t eks dan edges dalam suat u gr aph, dan kem udian pr une ( for est yang t elah k it a buat ) unt uk m enghilangk an pengulangan.
3 .2 .1 . Ge n e r a t in g
Kit a m endefinisik an fungsi generat e yang, j ika diber ikan suat u gr aph g dan sebuah vert eks v akan m em bangun sebuah t r ee yang r oot nya adalah v yang m engandung sem ua ver t eks dalam g yang 'r eachable' dar i v.
Jika gr aph g adalah siklik, m aka t r ee yang dibangkit kan akan infinit e. Tent u saj a kar ena t r ee dibangkit kan on dem and, hanya sepor si t er t ent u yang akan dibangkit kan.Bagian yang di prune t idak akan per nah dikonst r uksi.
3 .2 .2 . Pr u n in g
Tuj uan ut am a dar i pr oses pr uning adalah unt uk m engabaikan subt rees yang m em iliki akar - akar nya ( r oot s) t elah t er konst ruksi sebelum nya. Oleh kar ena it u kit a per lu m e - m aint ain sekum pulan ver t eks yang j um lahny a t erhingga ( secara t radisionil disebut dengan 'm ar ks ') dan ver t eks- ver t eks yang ak an diabaikan.
Car a yang t er m udah unt uk m encapai hal ini adalah dengan m enggunakan st at e t r ansfor m er s, dan m enir ukan t eknik im per at if yang m e- m aint ain suat u ar ray of booleans, yang diindeks oleh sekum pulan elem en. I nilah yang kit a lak ukan. I m plem ent asi dan sekum pulan ver t eks adalah sebagai ber ikut :
t ype Set s = Mut Ar r s Ver t ec Bool m k Em pt y : : Bounds - > ST s ( Set s) m kem pt y bnds = new Ar r bnds False
cont ains : : Set s - > Ver t ex - > ST s Bool cont ains m v = r eadAr r m v
include : : Set s - > Ver t ex - > ST s ( ) include m v = w rit eArr m v True
Sebuah set disaj ikan sebagai sebuah m ut able ar r ay, diindeks oleh ver t eks- vert eks, y ang m engandung nilai- nilai boolean. Unt uk m en- gener at e sebuah set t er hingga kit a m engalokasikan suat u ukur an ar r ay t er t ent u dengan sem ua elem en k it a inisialisasi dengan nilai False. Keanggot aan dari Set dapat diat ur hanya dengan m enggunakan pr osedur pem bacaan dan penulisan ar r ay.
Pr une didefinisik an sebagai ber ikut :
pr une : : Bounds - > Forest Ver t ex - > For est Ver t ex r une bnds t s = r unST ( m kEm pt y bnds 't henST' \ m - >
chop m t s)
fungsi prune dim ulai dengan m em per kenalk an sebuah t hr ead dar i st at e yg bar u, kem udian m en- gener at es sebuah ar r ay kosong didalam t hr ead t er sebut dan m em anggil 'pr osedur ' chop. Hasil akhir dar i pr une adalah har ga yang dibangkit kan oleh chop, yait u st at e akhir yang diabaikan.
chop : : Set s - > For est Ver t ex - > For est Ver t ex chop m [ ] = r et ur nST [ ]
chop m ( Node v t s : us)
= cont ains m v 't henST' \ visit ed - > if v isit ed t hen
chop m us else
Ket ika m elakukan chopping pada a list of t r ees, r oot nya yang per t am a diuj i. Jika sudah ada sebelum nya, selur uh t r ee t er sebut akan diabaikan. Kalau t idak akan dit am bah pada suat u set yang dir epr esent asikan oleh m , dan dua pem anggilan 'chop' ber ikut nya dibuat dalam sekuen.
Yang per t am a, disebut chop m t s, m elak ukan prunes t hd for est yang m er upakan akar nya adalah v, m enam bahkan sem ua for est t er sebut pada set dar i vekr t eks yang sudah dit andai. Set elah sem uanya selesai, sub- for est yang hendak di pr une diber i lam a as, dan sisanya adalah for est aslinya yang di chop. Hasilnya diber i nam a dengan bs, dan sebuah for est dikonst r uk sikan dar i kedua list t er sebut .
Sem ua ini diker j akan secar a lazy, on dem and. St at e com binat or s m em aksa k om put asi unt uk m engik ut i uruat an at au sequence yang sudah dit ent ukan sebelum nya. Pada t it ik ini kit a m ungkin her an, bagaim ana pem r ogr am an fungsional dapat dikat akan lebih m engunt ungkan. Kar ena t er nyat a, code nya t er lihat m ir ip dengan im per at if dalam beber apa hal kom ent ar yang dem ikian it u m ungkin ada benarnya, nam un perlu dicat at bahw a hal ini adalah sat u- sat unya t em pat dalam fase pengem bangan dim ana kit a m elakukan operasi dest r uk t if unt uk m eningk at k an efisiensi. Tam bahan lagi, enk apsulasi secar a sem pur na t elah disediakan oleh r unST yang m enj am in bahw a dfs m em punyai ekst er ior fungsional m ur ni.
Kom ponen- kom ponen dar i gener at e dan pr une kem udian digabungkan unt uk m enghasilk an definisi drTi dept h- first sear ch.
Dfs f vs = prune ( bounds g) ( m ap ( gener at e g) vs)
ar gum en vs adalah a list of ver t ices, sehingga fungsi gener at e di m ap ke vs. For est yang dihasilkan kem udian di pr une secar a pr eor der .
3 .3 Kom ple k sit a s
Model unt uk analisis k om plek sit as dari program im perat if st andar ( t radisional) m enyat akan bahw a algor it m a DFS adalah linier dalam ukur an gr aphnya ( oleh kar ena it u, dapat dieksekusi dalam O( V+ E) )
Model yang ber sesuaian dengan it u pada pem r ogr am an fungsional pada algor it m a y ang dit aw ar kan oleh Launcbur r y j uga linier dan w akt u pengeksekusiannya j uga konst an nam un diper kir akan akan kehilangan sebuah fakt or kira- kir a 6, j ika dibandingkan dengan im plem ent asinya dalam bahasa C.
4 . An a lisa
I m pe r a t if Fu n gsion a l Alir an par am et er fungsi t er lihat
secara eksplisit ( baik passing by value m aupun by r efer ence.
Alir an par am et er fungsi t er lihat secara im plisit y ankni t er sem bunyi dibalik definisi t ipe dar i fungsi t er sebut .
Pem r ogr am an t idak har us selalu m enggunakan fungsi st andar ( ser ingkali kit a dapat
m em buat user - defined funct ion) sehingga dalam banyak hal kit a t idak per lu m em aham i definisi fungsi st andar
Kar ena sem ua fungsi
didefinisik an oleh fungsi lain yang m em punyai or de lebih r endah, akan lebih nyam an bila k it a m engert i m endefinisik an fungsi st andar ( yakni fungsi pr im it if yang sudah disediakan)
Sangat m ungkin m asih t er dapat bugs ( r unt im e er r or s) set elah pr ogr am selesai
dikodekan kar ena var iable – var iable side effect seper t i count er , er r or det ect ion dan cont inuat ion m er upakan bagian pent ing dar i pr ogr am
( yakni r un- t im es er r or yang disebabkan oleh side effect s) t idak akan t er j adi. Nam un dem ikian hal t er sebut t idak m em bebaskan kit a dar i kesalahan dalam m endisain program .
Pr ogr am lebih sulit dibaca dan difaham i k ar ena abst r aksinya ber or de lebih r endah ( pr ogr am dit ulis dengan subt il – subt il pr ogr am yang m engahalangi pem aham an pem baca sehingga seringkali harus diser t ai dengan kom ent ar yang cukup panj ang)
Program lebih m udah dibaca dan difaham i kar ena abst raksinya berorde lebih t inggi ( dar i kode pr ogr am saj a m aksud dar i pr ogr am kar ena subt il program sudah dij elaskan pada fungsi – fungsi yang ber or de lebih r endah) .
Dar i segi uk ur an , LOC ( Lines of code) lebih banyak
Dar i segi ukur an, LOC ( Lines of code) lebih sedikit
5 . KESI M PULAN D AN SARAN
KESI M PULAN
Pada paper ini t elah di coba m engim plem ent asikan DFS dalam dua pendekat an yait u im per at if dan fungsional. Ada beber apa hat yang per lu dicat at :
1. Pem r ogr am an fungsional pada dasar nya m enaw ar kan suat u car a disain dan im plem ent asi yang lebih ber sifat alam i / nat ur al yang lebih confor m dengan car a ber fikir m anusia, nam un dem ikian ada bat asan- bat asan dalam bahasa pem r ogr am an fungsional t er ut am a yang pur e ( seper t i dihindar inya side- effect dan lazy evaluat ion) har us bet ul- bet ul difaham i t er lebih dahulu.
2. Pada im plem ent asi yang m engharuskan adanya side- effect m aka hal it u dapat disim ulasik an dengan m enggunakan m onad.
SARAN
Beber apa sar an yang ingin disam paikan pada paper ini:
1. Akan t er asa lebih m udah j ika kit a m em bandingkan pem r ogr am an im per at if dan fungsional dengan m em ulainya pada im plem ent asi seder hana.
2. Mungkin akan ada gunanya j ika kit a m encoba m enyelesaikan suat u m asalah, khususnya DFS ini dengan m em bandingkan bukan saj a ant ar a fungsional dan im per at if t api j uga ant ar apur e dan im pur e languages ( ant ar a Gofer dengan Schem e m isalnya) .
3. Paper ini dapat dilanj ut kan dengan m engadakan penguj ian lebih sek sam a t er hadap kom pleksit as baik w akt u m aupun kapasit as peny im panan.
D a ft a r Pu st a k a
Thon Launchbur r y, Gr aph Algor it hm w it h a Funct ional Flavour , Or egon Gr aduat e I nst it ut e.
Philips Wadler, Monads for funct ional program m ing, Univ ersit y of Glasgow , Scot land.
John Hughes, Why funct ional Pr ogr am m ing Mat t er s, I nst it ut ionen for Dat avet enskap, Sw eden.