Gikee里可以查到哪些项目的数据,有eos吗?

这样保证了宿主程序能完全掌管其中的数据
时间: 16:08:49
&&&&&&&&La52参考手册u.&&&&bRbroIrslmcyLiHniudFgerd,WleaClsyoeteuaish,uzerqeeiuieoadmree&&&&Cprgt?21–03LaogPCRoFelaalbeudrtetrsoteLalcneoyih0121u.r,U-i.reyvialnehemfhuies.&&&&&&&&kyig(ern译)kyig@6.oerns13cm开始·目录·索引·英文版&&&&&&&&目录&&&&1–简介2–基本概念21–值与类型.22–环境与全局变量.23–错误处理.24–元表与元方法.25–垃圾回收.251–垃圾回收元方法..252–弱表..26–协程.3–语言31–词法约定.32–变量.33–语句.331–语句块..332–程序块..333–赋值..334–控制结构..335–Fr语句..o336–函数调用作语句..337–局部声明..34–表达式.341–数学运算符..342–强制转换..343–关系运算符..344–逻辑运算符..345–连接操作..346–取长度运算符..347–优先级..348–表的构造器..349–函数调用..&&&&&&&&&&&&341–函数定义..035–可见性规则.4–应用程序接口41–栈.42–栈的大小.43–有效索引与合法索引.44–C闭包.45–注册表.46–C中的错误处理.47–C中的挂起处理.48–函数与类型.49–调试接口.5–TeAxlayLbayhuiirirr51–FntosadTps.ucinnye6–SadrLbaistnadirre61–BscFntos.aiucin62–CruieMnplto.ootnaiuain63–Mdls.oue64–SrnMnplto.tigaiuain641–Pten..atrs65–TbeMnplto.alaiuain66–MteaiaFntos.ahmtclucin67–BtieOeain.iwsprtos68–IptadOtuFclte.nunuptaiiis69–OeaigSseFclte.prtnytmaiiis61–TeDbgLbay.0heuirr7–LaSadlnutnaoe8–IcmaiiiiswttePeiuVrinnoptblteihhrvoseso81–CagsiteLnug.hnenhagae82–CagsiteLbais.hnenhirre83–CagsiteAI.hnenhP9–TeCmltSnaoLahopeeytxfu&&&&&&&&索引&&&&Lafntosuucin&&&&_G_ESOVRINasrsetcletabgolcgraedfloieerrrogteaalemttbeiarpislaodmt.bahasmt.csahaomt.snahaimt.tnahaamt.tnahaa2mt.elahcimt.oahcsmt.ohahcsmt.eahdgmt.xahep&&&&&&&&CAIP&&&&laAlcu_lolaCucinu_FntolaDbgu_eulaHou_oklaItgru_neelaNmeu_ubrlaRaeu_edrlaSaeu_ttlaUsgeu_nindlaWieu_rtr&&&&&&&&axlaylbayuiirirr&&&&la_ufruLBfela_euLRgla_dcauLadhrla_dltiguLadsrnla_dszuLadiela_dsrnuLadtigla_dvleuLadaula_rcekuLaghcla_rerruLagro&&&&&&&&&&&&laflodienxetpisarpalclpitrnrwqaaeulrweagtrwealnrweastrqieeurslceetsteaalemttbetnmeoubrtsrnotigtpyexclpal&&&&&&&&laasneu_bidxlaaihu_rtlaapncu_tailaclu_allaclku_allacektcu_hcsaklacoeu_lslacmaeu_oprlacnau_octlacpu_oylacettbeu_raealladmu_uplaerru_rolagu_clagtlofu_ealclagttu_ecxlagtilu_efedbt2asiti3.rhflagtlblu_egoabt2bni3.adlagtoku_ehobt2boi3.ntlagtokonu_ehocutbt2bri3.oo.lcscoklagtokaku_ehomsbt2beti3.tso.aesdtlagtnou_eifbt2boi3.xro.ifiesdftmlagtoau_elclbt2etati3.xrco.xctseeuelagteaalu_emttbebt2loaei3.rtto.xtseilagttcu_esakbt2lhfi3.sito.eevsgtnlagtalu_etbebt2rpaei3.elco.eoesrmvlagtou_etpbt2roaei3.rtto.eaesrnmlagtpauu_euvlebt2rhfi3.sito.elclsstoaelagtsrauu_euevleo.iestmlaisru_netcruiecetootn.raeo.mnmstpaelaiboenu_solacruiersmootn.euelaicucinu_sfntocruiernigpcaecniootn.unnakg.ofglaifntou_sucincruiesauootn.ttspcaecahakg.ptlailgtsraau_sihuedtcruiewaootn.rppcaelaeakg.oddlainlu_sicruieyedootn.ilpcaelalbakg.odilainnu_soepcaeptakg.ahlainnonlu_soeridbgdbgeu.eupcaepeodakg.rlalainmeu_subrdbggtsraupcaesaceseu.euevleakg.erhrlaisrnu_stigdbggtokeu.ehopcaesacptlaitbeakg.erhahu_saldbggtnoeu.eiflaitrau_sheddbggtoaeu.elclsrn.yetigbtlaiuedtu_ssraadbggteaalsrn.hreu.emttbetigcalalnu_edbggteitysrn.upeu.ergsrtigdmlalau_oddbggtpaueu.euvlesrn.idtigfnlanwttu_esaedbgstsrausrn.omteu.euevletigfralanwalu_etbedbgstokeu.ehosrn.mthtiggaclanwhedu_etradbgstoaeu.elclsrn.sbtiggulanwsraau_euedtdbgsteaalsrn.eeu.emttbetiglnlanxu_etdbgstpaueu.euvlesrn.oetiglwrlapalu_cldbgtaeakeu.rcbcsrn.actigmthlapalu_clkdbguvledeu.pauisrn.etigrplappu_odbguvleonsrn.eeseu.paujitigrvrelapsboenu_uholasrn.utigsblapsclsru_uhcouefl:lsiecoesrn.petiguprlapscucinu_uhfntofl:lsiefuh&&&&&&&&mt.loahformt.mdahfomt.rxahfepmt.ueahhgmt.dxahlepmt.oahlgmt.aahmxmt.iahmnmt.ofahmdmt.iahpmt.oahpwmt.aahrdmt.admahrnomt.admedahrnosemt.iahsnmt.ihahsnmt.qtahsrmt.aahtnmt.ahahtn&&&&&&&&la_ufntuLbfiila_ufntieuLbfiiszla_aleauLclmtla_hcayuLceknla_hcituLceknla_hcitgruLcekneela_hclnuLcekogla_hcltiguLceksrnla_hcnmeuLcekubrla_hcotouLcekpinla_hcsakuLcektcla_hcsrnuLcektigla_hctpuLcekyela_hcuaauLcekdtla_hcusgeuLceknindla_hcvrinuLcekesola_oieuLdflla_otiguLdsrnla_rouLerrla_xceutuLeerslla_ieeutuLflrslla_emtfeduLgteailla_emttbeuLgteaalla_esbaluLgtutbela_sbuLgula_euLlnla_odufruLlabfela_odufruLlabfexla_odieuLlaflla_odieuLlaflxla_odtiguLlasrnla_elbuLnwila_elbaluLnwitbela_emttbeuLnweaalla_esaeuLnwttla_pnisuLoelbla_pituLotnla_pitgruLotneela_plnuLotogla_pltiguLotsrnla_pnmeuLotubrla_psrnuLottigla_pusgeuLotnindla_rpufruLpebfela_rpufieuLpebfszla_uheutuLpsrslla_uheutieuLpsrslszla_euLrfla_eurfuLrqiela_efnsuLstucla_emttbeuLsteaalla_etdtuLtsuaala_osrnuLtltigla_rcbcuLtaeakla_yeaeuLtpnm&&&&&&&&&&&&fl:ieielnsfl:edierafl:ekiesefl:evuiestbffl:rtiewiei.lsocoei.lsofuhi.nuoipti.ieolnsi.pnooei.uptootui.oeoppni.edorai.terosdri.tiosdni.totosdui.mflotpiei.yeotpi.rtowie&&&&&&&&tbecnaal.octtbeisral.nettbepcal.aktbermval.eoetbesral.ottbeupcal.nak&&&&&&&&la_neuLurflapsftigu_uhsrnuLweelapsgoatbela_hru_uhlblallapsitgru_uhneelapslgtsraau_uhihuedtlapsltrlu_uhiealapsltigu_uhsrnlapsnlu_uhilapsnmeu_uhubrlapssrnu_uhtiglapstrau_uhhedlapsusgeu_uhnindlapsvleu_uhaulapsvsrnu_uhftiglarwqau_aeullarweu_agtlarweiu_agtlarwepu_agtlarweu_alnlarweu_astlarweiu_astlarwepu_astlargseu_eitrlarmvu_eoelarpaeu_elclarsmu_euelastlofu_ealclastilu_efedlastlblu_egoalastoku_eholastoau_elcllasteaalu_emttbelastalu_etbelastou_etplastpauu_euvlelastsrauu_euevlelasauu_ttslatboenu_oolalatcucinu_ofntolatitgru_oneelatitgru_oneexlatltigu_osrnlatnmeu_oubrlatnmexu_oubrlatpitru_oonelatsrnu_otiglattrau_ohedlatusgeu_onindlatusgexu_onindlatuedtu_osraalatpu_yelatpnmu_yeaelauvledu_pauilauvleneu_pauidxlauvleonu_paujilavrinu_eso&&&&&&&&&&&&laxoeu_mvlayedu_illayedu_ilk&&&&&&&&1–简介&&&&La是一门扩展型程序设计语言,用于辅助一般的过程式编程。当然,它也对面向对象编程、u函数式编程和数据驱动式编程提供良好的支持。La作为一门强大、轻量、可嵌入式的脚本语u言能供任何需要的程序使用。La是由cenCula(标准C+的一个共通子集)实现的一和C+个库。作为一门扩展型语言,Lau没有“an程序的概念:它只能嵌入宿主程序,宿主程序被称为mi”ebdigporm或者简称hs。宿主程序可以调用函数执行一段La代码,可以读mednrgaotu写La变量,甚至可以注册C函数以在Lauu代码中调用。通过对C函数的使用,Lau足以应付各种领域,完全可以共享一个句法框架而定制不同的程序语言。Lau官方发布版包含一个叫la的宿主程序示例,它是一个利用Lauu库写成的完整独立的Lau解释器,一般用于交互和批处理。La作为自由软件,u就像lcneies里面所说,使用它是不需要抵押品的:。本手册所描述的)实现可以在La官方网站wwlaog中找到。uw.u.r就像任何参考手册一样,这份文档某些地方有点枯燥。关于La背后设计思想的探讨,可以u看看Lau官方网站上的技术论文。至于Lau编程的详细介绍,请参阅Rbrooet的书,PormigiLargamnnu(当前最新是第三版)。&&&&&&&&2–基本概念&&&&本章节介绍La语言里的基本概念。u&&&&&&&&21–值与类型.&&&&La是一门动态类型语言。这意味着变量没有类型,只有值。La没有类型定义,由值本身uu携带自己的类型信息。La中的所有值均是frtcasvle(第一类值)。这意味着所有的值均可存于变量uis-lsaus中,也可作为参数传递给其他函数,也可作为函数结果被返回。Lau中有八种基本类型:nli(空)、boenola(布尔)、nme(数字)、srn(字符ubrtig串)、fnto(函数)、uedt(用户数据)、tra(线程)和tbeucinsraahedal(表)。Nl类型只有值nlii,主要用于标识与其他值的不同;通常代表无意义的值。Boen类型只有两种值fle和tu。nl和fle都表示条件为假;而其他任何olaasreias值均表示为真。Nme表示实数(双精度浮点数)。数字间的运算操作与底层Cubr实现遵循相同的规则,一般就是IE74EE5标准。(使用内部其他数字类型如单精度浮点或长整型重新编译一个Lau解释器也非常容易;参见laofh文件。)ucn.&&&&&&&&&&&&Srn代表字节串。Lai8btcentigus-ila:字符串可以包含任意8bt-i值,包括'0。\'La可以调用(操作)由La和C写成的Fnto(参见§..)。uuucin349uedt类型用来将任意C数据保存在La变量中。一个uedt类型的值就是一sraausraa块原生内存的指针。uedt分两类:fluedt和lgtuedt,前者的sraaulsraaihsraa内存块由La管理;后者的内存块由hs管理。Uedt在La中除了赋值与鉴定uotsraau测试便没有其他预定义操作了。但是通过使用mttbe(元表),程序员可以为fleaalsuluedt类型的值自定义操作(参见§.)。Uedt类型的值不能在La中创建sraa24sraau与修改,只能通过CAIP。这样保证了宿主程序能完全掌管其中的数据。tra代表独立的执行线程,用于实现cruie(协同程序)(参见§.)。不要把hedootns26La线程与操作系统线程搞混。La在所有系统上均支持cruie,即使系统并不支持uuootnstras。hedtbe类型实现了关联数组。也就是说,该数组可以用任何La值(除了nl和NNaluia)作索引,而不仅限于数字。Tbe可以包含所有类型的值(除了nlalsi)。任何带nl值的键i都不是tbe的一部分。相应的,任何不属于tbe的键都关联一个nl值。alaliTbe是La中唯一的数据组织机制,可以用于表示普通数组、序列、符号表、集合、记alu录、图、树等等。在表示记录时,Lau以域作为索引。语言支持以anm.ae来表示a"ae][nm",这只是一种语法糖。tbe的创建方式有很多种(参见§..)。al348我们使用序列这个词来表示一个递增表,其索引为{.n,其中的n表示序列的长度1.}(参见§..)。346与索引一样,tbe中的域也可为任意类型。特别的,由于函数也是frtcasvlealis-lsaus(第一类值/一等公民),所以tbe的域也可包含函数。从而tbe也能携带mtosalalehd(参见§..0341)。(译注:这为面向对象提供了基础)tbe的索引遵循语言中定义的原生相等性。表达式ai与aj只在i与j原生相al[][]等(指无元方法的相等)时才表示同一个表元素。Tbeucinhed和(uluedt类型的值均是对象:变量实际上不含al、fnto、trafl)sraa有值,只是引用值。赋值、参数传递和函数返回等操控的只是值的引用;这些操作不会做任何性质的拷贝。库函数tp可以返回一个给定值的类型(参见§.)。ye61&&&&&&&&22–环境与全局变量.&&&&就像在§.和§..讨论的那样,任何对全局名称vr的引用均会被翻译成32333a_N.a。此外,任何在局部变量之外编译的程序块均叫作_N(参见§..),所以EVvrEV332_N本身在程序块中从来都不是全局名称。EV尽管存在外部_N变量用于全局名称的翻译,_N本身其实是一个完全符合命名规则的名EVEV称。你完全可以定义新的变量/参数并取这个名字。每一次使用_N对全局名称的引用在当EV时对程序是可见的,完全遵循La通用可见性规则(参见§.)。u35任何被存储_N值的表叫作evrnetEVniomn(环境).La维持一个叫goaevrnetulblniomn(全局环境)的特殊环境。这个值在C注册表(参见§.)表示一个特殊索引。在La中,变量_被初始化为相同值。45uG当La编译一个cukuhn(程序块)时,会先将其中_N的值提升为全局环境(参见EVla)。因此,默认情况下,Laodu代码中的全局变量一般指的是全局环境里的入口。此外,加&&&&&&&&&&&&载到全局环境下的所有标准库和部分函数均是在该环境下运作。你可以使用lafl)来加载一个不同环境下的cukodiehn。&&&&&&&&laod&&&&&&&&(或者&&&&&&&&如果你改变了注册表中的全局环境(通过C代码或者dbg库),在改变之后加载的eucuk将获得新的环境。先前加载的cuk虽不受影响,但都要在自身的_N变量中引hnhnEV用到新环境去。此外,La从不更新变量_(存于原始全局环境)。uG&&&&&&&&23–错误处理.&&&&由于La是一门嵌入式扩展语言,所有的La行为均源于宿主程序C代码对La库的函uuu数调用(参见lapalu_cl)。无论何时La程序块发生编译/u执行错误,控制权均会交给宿主程序,由宿主程序触发恰当的措施(比如打印一条出错信息)。La代码可以通过调用err函数明确产生错误信息。如果需要在La中捕捉错误,可urou以使用pal或xcl来在poetdmd(保护模式)下调用一个处理函数。clpalrtceoe每产生一个错误,就会传播一个包含该错误信息的errojc(错误对象)(也叫robeterrmsaeroesg(错误消息))。La本身只为错误对象产生一条字符串错误信息,而程序u可以为错误对象产生任何形式的错误信息。当使用xcl或者lapalpalu_cl时,可以传递一个msaehnlresgade(消息处理程序)以在错误出现时调用。这个程序由原始错误消息调用并返回一条新的消息。它在错误离开栈之前被调用,故能收集更多关于错误的信息,比如检查堆栈和创建堆栈回溯。这个消息处理程序在保护模式下被调用,自身也处在保护中,因此,消息处理中出现错误的话将再次调用消息处理(也就是自己)。如果发生了这种循环,将由La中断并返回一段恰当的消息。u&&&&&&&&24–元表与元方法.&&&&La中的每个值均能拥有一个mttbeueaal(元表)。这个mttbe就是普通的Laeaalutbeal,然后定义了一些原始值在特定操作下的行为。你可以通过在一个值的元表中设置特定的域来改变操作行为。例如,当一个非数字的值要做加法操作,Lau会查询该值的元表中"_d"域中的函数,如果找到一个函数,La则调用该函数来执行加法。_adu元表中的键命名为eetvn(事件);对应的值叫mtmtoseaehd(元方法)。在刚才的例子中,事件是"d"ad,元方法则是那个执行加法操作的函数。你可以使用gteaal函数来查询任何值的mttbeemttbeeaal(元表)。你可以使用steaal函数来替换tbe的mttbe。但不能在La中改变其emttbealeaalu他类型(比如nme、srn类型)的mttbeubrtigeaal(除非使用dbg库),必须得使用euCAIP。每个tbe和fluedt拥有独立的mttbealulsraaeaal(虽然多个tbe和uedtalsraa也可共享它们的mttbeeaal)。而所有其他类型的值,一种类型只有一个mttbeeaal;意味着所有数字只有一个mttbeeaal,所有字符串也一样,等等。默认情况下,单个值是没有mttbe的,但字符串库为srn类型设置了一个mttbeeaaltigeaal(参见§.)。64一个mttbe控制着一个对象在数学运算、比较、连接、取长和索引等操作的行为表现。eaal它也能定义函数,让uedt或者tbe做垃圾收集时调用。当La需要对某个值执sraaalu行其中一种操作时,会先检查值的mttbe中是否有对应的事件。如果有,键对应的值eaal(mtmto元方法)将决定La如何执行操作。eaehduMttbe能控制的操作全列在了下面。各种操作用对应的名字区分。每种操作的键都是操eaal&&&&&&&&&&&&作名前面加上两个下划线"_d"_ad。&&&&&&&&(&&&&&&&&'__'&&&&&&&&)的字符串。比如&&&&&&&&"d"ad&&&&&&&&操作的键就是字符串&&&&&&&&这些操作的含义由La函数来解释更准确,毕竟函数展示了解释器内部如何执行该操作。这u里的La代码仅用作解释说明,实际的行为已经硬编码在解释器中,自然也比这些模拟代码u高效。在下面代码使用到的rwe,tnme等等函数可在§.找到。注意,我们使agtoubr61用下面一行表达式来从给定对象中提取元方法mttbeoj[vn]eaal(b)eet可被解读成rwe(emttbeojo{,eetagtgteaal(b)r}vn)这意味着访问一个元方法不会调用其他元方法,而且访问没有mttbe的对象也不会失败eaal(仅仅导致nli)。对于一元操作符-和#,元方法由虚拟的第二参数调用。这个额外的参数仅用于简化Lau的内建对象;在将来的版本中可能被移除,因此我们不会在下面讨论。(其实额外参数的大部分使用都是无关紧要的。)"d"+操作。ad:下面的gtihnlr函数定义了La如何为二元运算选择处理方法。La首先测ebnadeuu试第一个操作数,如果它的类型没有为该运算操作定义处理方法,La就会测试第二个u操作数。fntogtihnlr(p,o2eetucinebnadeo1p,vn)rtrmttbeo1[vn]omttbeo2[vn]euneaal(p)eetreaal(p)eetedn通过这个函数,o1+o2的行为就是ppfntoadeet(p,o2ucind_vno1p)lclo,o=tnme(p)tnme(p)oa12oubro1,oubro2ioadote-两个操作数均为数字?f1n2hnrtro+oeun12-这里的''就是基本加法('d'+ad)es-至少有一个操作数不是数字lelclh=gtihnlro1o2"_d"oaebnade(p,p,_ad)ihtefhn-以两个操作数调用处理方法rtr((p,o2)eunho1p)es-没有处理方法:默认行为leerr··ro(·)ednednedn"u"-操作,行为类似"d"操作。sb:ad"u"*操作,行为类似"d"操作。ml:ad"i"/操作,行为类似"d"操作。dv:ad"o"%操作,行为类似"d"操作,原始操作是o-foro/2*2md:ad1lo(1o)o。"o"pw:^(幂)操作。行为类似"d"操作,原始操作是pw函数(来自adoCmt库)。ah"n"一元-操作。um:fntoumeet(pucinn_vno)&&&&&&&&&&&&lclo=tnme(poaoubro)iote-oeadinmrcfhn-prnsuei?rtr--''hritepiiie'n'euno--eeshrmtvumes-teoeadintnmrcle-hprnsouei.-Tytgtahnlrfoteoead-roeadermhprnlclh=mttbeo)_umoaeaal(p._nihtefhn-cltehnlrwtteoead-alhadeihhprnrtr((p)eunho)es-nhnlraalbedfutbhvole-oadevial:ealeairerr··ro(·)ednednedn"oct:.(连接)操作。cna".fntocna_vn(p,o2ucinocteeto1p)i(yeo1="tigotp(p)="ubr)adftp(p)=srn"ryeo1=nme"n(yeo2="tigotp(p)="ubr)tetp(p)=srn"ryeo2=nme"hnrtro1.o2-piiiesrncnaeaineunp.p-rmtvtigoctntoeslelclh=gtihnlro1o2"_oct)oaebnade(p,p,_cna"ihtefhnrtr((p,o2)eunho1p)esleerr··ro(·)ednednedn"e"#操作。ln:fntolneet(pucine_vno)itp(p="tigtefyeo)=srn"hnrtrsre(peuntlno)-piiiesrnlnt-rmtvtigegheslelclh=mttbeo)_lnoaeaal(p._eihtefhnrtr((p)eunho)-clhnlrwtteoead-aladeihhprnesitp(p="al"telefyeo)=tbehnrtr#peuno-piiietbelnt-rmtvaleghes-nhnlraalbeerrle-oadevial:roerr··ro(·)ednednedn关于tbe的长度请参阅§..。al346"q:=操作。函数gtqahnlr定义了La如何选择元方法进行相等操e"=eeuladeu作。只有当两个被比较的值类型相同,而且在当前操作下拥有相同的元方法,而且不属于tbe或fluedt间的一种时,被选出的元方法才会有效。alulsraafntogtqahnlr(p,o2ucineeuladeo1p)itp(p)~tp(p)ofyeo1=yeo2r&&&&&&&&&&&&(yeo1~"al"adtp(p)~"sraa)tetp(p)=tbenyeo1=uedt"hnrtrnleuni-dfeetvle-ifrnausednlclm1=mttbeo1._qoameaal(p)_elclm2=mttbeo2._qoameaal(p)_eim1=m2tertrm1esrtrnledfm=mhneunmleeuninedn"q事件定义如下:e"fntoe_vn(p,o2ucinqeeto1p)io1=o2tefp=phn-piiieeul-rmtvqa?rtrtueunre-vleaeeul-ausrqaedn-tymtmto-reaehdlclh=gtqahnlro1o2oaeeulade(p,p)ihtefhnrtrntntho1o2eunoo(p,p)eslertrfleeunasednedn注意结果常为boen值。ola"t:操作。l"fntol_vn(p,o2ucinteeto1p)itp(p)="ubradtp(p)="ubrtefyeo1=nme"nyeo2=nme"hnrtro1o2-nmrccmaioeunpp-ueioprsnesitp(p)="tigadtp(p)="tigtelefyeo1=srn"nyeo2=srn"hnrtro1o2-lxcgahccmaioeunpp-eiorpioprsneslelclh=gtihnlro1o2"_t)oaebnade(p,p,_l"ihtefhnrtrntntho1o2eunoo(p,p)esleerr··ro(·)ednednedn注意结果常为boen值。ola"e:操作。l"=fntol_vn(p,o2ucineeeto1p)itp(p)="ubradtp(p)="ubrtefyeo1=nme"nyeo2=nme"hnrtro1o2-nmrccmaioeunp=p-ueioprsnesitp(p)="tigadtp(p)="tigtelefyeo1=srn"nyeo2=srn"hnrtro1o2-lxcgahccmaioeunp=p-eiorpioprsneslelclh=gtihnlro1o2"_e)oaebnade(p,p,_l"ihtefhnrtrntntho1o2eunoo(p,p)esle&&&&&&&&&&&&h=gtihnlro1o2"_t)ebnade(p,p,_l"ihtefhnrtrntho2o1euno(p,p)esleerr··ro(·)ednednednedn注意,缺少"e元方法时,La就尝试"t,并假定ab等价于nt(l"ul"=oba。)就像其他比较运算符,其结果常为boen值。ola"ne"索引操作用于访问tbeky。注意仅当ky不在tbe中时,才会idx:al[e]eal尝试元方法。(当tbe不是表时,里面没有键,所以会一直尝试元方法。)alfntogtal_vn(al,kyucinetbeeettbee)lclhoaitp(al)="al"tefyetbe=tbehnlclv=rwe(al,kyoaagttbee)-ikyipeetrtrrwvle-fesrsn,eunaauiv~nltertrvedf=ihneunnh=mttbetbe._neeaal(al)_idxih=nltertrnledf=ihneuninesleh=mttbetbe._neeaal(al)_idxih=nltef=ihnerr··ro(·)ednednitp()="ucintefyeh=fnto"hnrtr((al,ky)eunhtbee)-cltehnlr-alhadeesrtrhkyleeun[e]-orpaoeainoi-reetprtontednedn"eidx:赋值给索引tbeky=vlenwne"al[e]au。注意仅当ky不在tbe中eal时,才会尝试元方法。fntostal_vn(al,kyvleucinetbeeettbee,au)lclhoaitp(al)="al"tefyetbe=tbehnlclv=rwe(al,kyoaagttbee)-ikyipeetdrwasgmn-fesrsn,oasinetiv~nlterwe(al,rtredf=ihnasttbee,au)eunnh=mttbetbe._eidxeaal(al)_nwneih=nlterwe(al,rtredf=ihnasttbee,au)eunnesleh=mttbetbe._eidxeaal(al)_nwneih=nltef=ihnerr··ro(·)ednednitp()="ucintefyeh=fnto"hn&&&&&&&&&&&&htbekyvle(al,e,au)eshky=vlele[e]auednedn"al:当La调用一个值时调用。cl"u&&&&&&&&-cltehnlr-alhade-orpaoeainoi-reetprtont&&&&&&&&fntofnto_vn(uc..ucinucineetfn,.)itp(uc="ucintefyefn)=fnto"hnrtrfn(.)-piiiecleunuc..-rmtvaleslelclh=mttbefn)_cloaeaal(uc._alihtefhnrtrhfn,..eun(uc.)esleerr··ro(·)ednednedn&&&&&&&&25–垃圾收集.&&&&La实行自动内存管理。意味着你不用担心创建新对象时的内存分配,也不用担心对象不再需u要时的内存释放。La运行一个graecletruabgolco(垃圾收集器)来自动管理内存,收集daojcsedbet(死亡对象)(指La不再访问的对象)。La中使用的所有内存(对uu象)均被自动管理:srnsalssraaucin、trasnenltig、tbe、uedt、fntoshed、itrasrcue等等。tutrsLa实现了一个增量标记u清除收集器。它使用两个数字来控制垃圾收集周期:graeabgcletrpue和graecletrsemlile。两者均使用百分点作为计olcoasabg-olcotputpir数单元(比如,100在内在表示为1个百分点)。graecletrpue控制着收集器在开始新周期前的停顿时长。数字越大收集器越abg-olcoas不积极,停顿时间越长。小于100意味着收集器不停顿即开始新周期。200表示收集器在内存使用量达到原来的两倍时才会开启新的周期。graecletrsemlile控制收集器与内存分配的相对速度。数字越大收集abg-olcotputpir器越积极,增加的收集量也越大。小于100会让收集器工作的非常慢,甚至造成收集器永远无法结束当前周期。默认值为200,表示收集器以内存分配的两倍速度运行着。如果你将setpmlileutpir设置的非常大(比程序中可能使用到的最大字节数还要大1%0),收集器的行为将类似so-h-ol收集器(即为了完成一个完整的垃圾收集周tptewrd期而暂停与主程序的交互)。如果你同时又将pue设成20as0,那收集器就像老版本的Lau一样,等内存使用量达到La本身使用量的两倍才会做一次完全的垃圾回收。u你可以通过在C中调用lag或者在La中调用cletabg来改变这些数字。u_cuolcgrae你也可以通过这些函数来直接控制垃圾收集器(比如关闭、重启之类)。作为La52中的一个实验特性,你可以改变收集器的操作模式,从iceetl改u.nrmna成gnrtoa。gnrtoacletr假设大部分对象存活时间很短,因此收集器eeainleeainlolco只会检测最近创建的新对象。这种行为能降低收集器的使用时间,但会增加内存使用量(逐渐累积老死的对象)。要解决第二个问题,可以让gnrtoacletr时常执行完整eeainlolco的回收。记住,这只是处于实验阶段的特性,欢迎尝试,看看效果咋样。&&&&&&&&&&&&251–垃圾收集元方法..&&&&你可以为tbe设置垃圾收集元方法,也可使用CAI为fluedt设置(参见alPulsraa§.)。这些元方法也叫fnlzr(析构器)。析构器允许外部资源管理(比如关闭文24iaies件、关闭网络、关闭数据库连接或者释放自己的内存)配合La的垃圾收集。u对象(tbe或者uedt)需要被析构回收时,你必须标记它为可析构。只需为对象alsraa设置一张有"_c域的元表即可标记对象为可析构。注意一点,如果你为对象先设置了一张_g没有_g域的元表,然后在元表中新建一个_g域,这个对象是没法被标记的。而在对_c_c象被标记后,你可以随意改变元表中的_g域。_c当被标记对象变成垃圾时,垃圾收集器不会立马将它回收,而是由La将之放进一个列表u中。收集结束后,La对列表中每个对象执行下面函数的等价操作:ufntog_vn(b)ucinceetojlclh=mttbeoj._coaeaal(b)_gitp()="ucintefyeh=fnto"hnhoj(b)ednedn每个垃圾收集周期的结尾,当前周期内收集到的垃圾对象会以被标记顺序的反序调用析构器。这意味着程序里最后被标记的对象最先析构。析构器的执行可能发生在普通代码执行期间的任何时候。由于被回收了的对象还要被析构器使用,该对象会由Larsretdueurce(复活)。当然,这个复活是短暂的,而且对象的内存会在下一个垃圾收集周期释放掉。然而,如果析构器将对象存在某些全局位置(比如一个全局变量里面),那这就变成永久性复活了。总之,对象的内存只有在完全不可访问的情况下才能被释放;它的析构器也从不会被调用两次。当关闭一个状态(参见lacoeu_ls),Lau将对所有被标记为可析构的对象以标记的反序来调用析构器。如果刚好有新对象在这个阶段被标记,新对象是不会被析构的。&&&&&&&&252–弱表..&&&&watbe指表中元素被warfrne(弱引用)。而垃圾收集器会忽略弱引用,换ekalekeeecs言之,如果一个对象只有弱引用,垃圾收集器会将之回收。弱表的键与值均可为wa。拥有弱键的表,键会被回收而对应的值不会。而键与值都waekek的话,收集器会将键与值都回收掉。而且,无论键与值谁被回收了,对应的键值对都会从表中移除。tbe的wa性质受元表的_md域控制。如果_md域是一个含有字alek_oe_oe符''的字符串,则tbe中的键就是wa的;相应的,如果_md域含有字符kalek_oe''al中的值就是wa的。v,tbeek拥有弱键与强值的表也叫ehmrntbepeeoal(短命表)。在这种表中,值的可访问性只依赖对应键的可访问性。尤其是键的唯一引用来自它的值时,这个键值对将被移除。对表的waek性质做任何改变只会对下一个垃圾收集周期产生影响。而且,如果你改成更srn(强)的模式,La在更改真正生效之前仍然会回收表中某些项。togu只有那些明确说明的对象才会从弱表中移除。数字和轻量C函数之类不受垃圾收集管理,因此不会从弱表中移除(除非它的关联值已被回收了)。虽然字符串受垃圾收集管理,但它们没有明确说明,因此也不会从弱表中移除。复活的对象(指那些即将析构且只能由析构器访问的对象)在弱表中有一种特殊行为。它们在运行自身析构器之前会从弱值中移除,但只能在下一个垃圾收集周期从弱键中移除,此时才是&&&&&&&&&&&&真正的对象释放。这种行为就允许析构器在弱表中访问与对象相关的属性。如果一个弱表在当前回收周期位于一个复活对象中,那只能在下一个周期里才能正确清除掉。&&&&&&&&26–协程.&&&&La支持cruie(协程),也叫claoaiemlihedn(协同多线uootnsolbrtvuttraig程)。La中的每个协程都在各自独立的线程中执行。不像多线程系统中的线程,协程只会在u显示调用yed函数时挂起。il调用cruiecet会创建一个协程,其参数就是协程的主函数。这个cet函数ootn.raerae仅仅创建新的协程并返回句柄(一个类型为tra的对象),而不会启动协程。hed调用cruiersm就开始执行协程。当你首次调用cruiersm,需传入的ootn.eueootn.eue第一个参数就是cruiecet返回的tra。然后协程从它的主函数第一行开始执ootn.raehed行。接下来传入cruiersm的其他参数均会传递给协程的主函数。协程一旦运行,ootn.eue直到终止或者挂起。协程有两种方式终止执行:正常退出和异常退出,前者指由它的主函数返回退出(无论最后有没有显示rtr),这时cruiersm返回tu,并附带协程主函数的返回值;eunootn.euere后者指发生未预防的错误,这时cruiersm返回fleootn.eueas,并附加一条错误消息。调用cruieyed能使协程挂起。当协程发生挂起时,相应的cruiersmootn.ilootn.eue会立刻返回,即使挂起发生在内层函数调用中(这意味着不限于在主函数之内,其他受主函数直接/间接调用的函数之内也能发生)。协程的挂起,使cruiersmootn.eue同样返回tu,并附带那些传递给cruieyed的参数值。再次调用cruieyed将reootn.ilootn.il恢复该协程,并从挂起的断点处继续执行,其返回值则是传递给cruiersm的参数ootn.eue值。类似cruiecet,cruiewa函数也能创建协程,但返回的不是协程本身,ootn.raeootn.rp而是一个能重新获得协程的函数。传递给warp函数的任何参数都将作为cruiersm的额外参数。cruiewa返回cruiersm返回值中除ootn.eueootn.rpootn.eue第一个(boenola型错误代码)之外其他所有值。与cruiersm不同的是,ootn.euecruiewa不捕获错误;任何错误都得由调用者来传递。ootn.rp协程如何运作,思考下面的示例:fntofo()ucinoapit"o"arn(fo,)rtrcruieyed2aeunootn.il(*)ednc=cruiecet(ucin(,)oootn.raefntoabpit"obd"abrn(c-oy,,)lclr=foa1oao(+)pit"obd"rrn(c-oy,)lclrs=cruieyedababoa,ootn.il(+,-)pit"obd"rsrn(c-oy,,)rtrb"n"eun,ededn)pit"an,cruiersm(o11)rn(mi"ootn.euec,,0)pit"an,cruiersm(o"")rn(mi"ootn.euec,r)pit"an,cruiersm(o"""")rn(mi"ootn.euec,x,y)pit"an,cruiersm(o"""")rn(mi"ootn.euec,x,y)&&&&&&&&&&&&运行结果如下:c-oy1obdfoo2mianturec-oyrobdmianturec-oyxobdmianturemianfleasedncnorsmdacruieanteueedootn来创建和操作协程:参阅&&&&&&&&你也可以通过CAIPlanwhedu_eueu_il等函数。u_etra、larsm、layed&&&&&&&&3–语言&&&&本章介绍La的词法、语法和句法。换言之,这一章介绍哪些tknuoe(符号)是合法的,它们如何组合,以及组合后的含义。语言的结构由常用的扩展BFN范式来表示,即{}表示0a或多个aa表示a为可选项。,[]非终结符(一般是语言里的语法成分)保持不变,关键字类似kodwr,其余的终结符(语言字符集的基本字符)要像这样‘’位于引号中。完整的La语法可在本手册最末处§找=u9到。&&&&&&&&31–词法规定.&&&&La是门fe-om语言。除了名字与关键字间的分隔符,它将忽略词法元素(符号)之urefr间的空白(包括换行)和注释。La中的Nmsuae(名字)(也叫ietfesdniir(标识符))可以是任何字母、数字、下划线组成的非数字开头的字符串。标识符用于命名变量、表的域和标签。下面是La保留的kyod(关键字),不能用作名字:uewrsadnfleaslcloatehnbekrafronlituredofntoucinntoutlnieslegtooorwiehlesilefifrpaeetedninrtreun&&&&&&&&La区分大小写:ad是保留字,但Ad和AD则是两个不同的合法名字。一般约定,unnN以下划线开头接大写字母的名字(比如_ESO)被保留用于La内部变量。VRINu下面是其他符号:+==(;~=):*={,/=}.%[..^]...#=::&&&&&&&&Ltrlsrnsieatig(文字串)可以放在单双引号内,其中也可包含类似C中的转义序列:'a(\'响铃)'b(,\'退格)'f(,\'换页)'n(,\'换行)'r(,\'回车)'t,\'(横向制表)'v(,\'纵向制表)'\(,\'反斜线)'"(,\'双引号)和''(,\'单引&&&&&&&&&&&&号)一个反斜线后跟一个换行符(\n。\)会让字符串中产生一个换行符号(\)。转义序列n'z\'会跳过后面的空白字符,包括换行符;这个在将一段很长的文字串截成多行时非常有用。文字串中的字节也可通过数字表示出来。使用转义序列\X即可办到,X是两个十六进制xXX数字;或者使用转义序列\d,dd表示最多三个十进制数字的序列。(注意,如果要在转ddd义之后跟一个数字,那斜线后必须写满三个数字,否则会有歧义。)La中的字符串可以包含u任意8bt-i值,包括'0表示的零;\'文字串也可由长括号的形式定义。左长括号由两个左方括号([)表示,在两个方括号之间可[以有n个等号(=),等号代表级别。于是,0级左长括号就写作[,1[级就写作[[=。相对应的右长括号就是]和]]]=。这主要用于长文字串,在相同等级(就是等号一样多)的左右长括号之内,可输入任何文本,不处理转义符,不受分行限制,忽略所有不对等级的嵌套长括号。任何行尾符(回车、换行、回车加换行、换行加回车)统统变成简单的换行。Aybtialtrlsrnntepiilafcebtepeiunyenieatigoxlctyfetdyhrvosrlsrpeetisl.HwvrLaoesflsfrprigitxueersnstefoee,upnieoasnnetmd,adtesseflfntosmyhvpolmwtsmcnrloenhytmieucinaaerbesihoeotocaatr.S,iisfrtrpeetnntxdtaaqoehrcesotsaeoersno-etaasutdltrlwtepiiecpsqecsfrnntxcaatr.ieaihxlctsaeeuneoo-ethrces为了方便,左长括号后面紧跟的那个换行符将被忽略。例如,一个使用ACI码的系统中(SI''编码为9,\编码为1,''编码为4),下面五种形式表示相同的字符串:a7n019a='l\13'aon2"a="l\13"aon2\"a='9l\\42"a=[ao[l13]2"]a=[==[aol13]=2"=]nmrclcntn(数值常量)可以写成普通形式,也可以写成科学计数法(指数部分ueiaosat由字母''或''标记)。La也支持十六进制常量,只需前面加上0或者0。十六eEuxX进制也接受二进制指数形式的小数(用字母''或'标记)。以下是一些合法的数值常量pP写法:330.311.460f0010A3xfx.Ex2p461.11E+X.2F5421P1&&&&&&&&cmetomn(注释)由两横开始(-,可以出现在字符串之外的任何地方。如果跟在-后-)面的不是一个左长括号,这就是一个短注释,作用范围直到行末。否则就是一个长注释,作用范围是同等级的右长括号。长注释常用于临时屏蔽代码块。&&&&&&&&32–变量.&&&&变量是存储值的地方。La中有三种:全局变量、局部变量和表的域。u一个单独的名字可以表示为一个全局变量或者一个局部变量(或者一个函数参数,这也是一种局部变量):vr:=Nma:aeNm就是§.所定义的标识符。ae31&&&&&&&&&&&&任何没有显示声明为lcl(参见§..)的变量名均可假定为全局变量。局部变量的oa337lxclysoe(作用域):定义在函数作用域(参见§.)的局部变量可被其自由访eialcpd35问。变量首次赋值前,默认值均为nli。方括号用于索引表:vr:=peiep‘’ep‘’a:rfxx[x]访问表的域的含义能被元表更改。而访问被索引的变量ti[]等价于调用gtal_vn(,)etbeeetti。(参见§.获取gtal_vn函数的完整描述。该函数未24etbeeet在La中定义,也不能调用。这里仅仅用于阐述原理。)u语法vrNm也仅是vr"ae]的语法糖:a.aea[Nm"vr:=peiep‘’Nma:rfxx.ae对全局变量x的访问等价于访问_N.。由于按程序块编译所以,_N本身并不是一个EVxEV全局名称(参见§.)。22&&&&&&&&33–语句.&&&&La支持的常见语句类似Psa或者Cuacl。包括赋值语句、控制语句、函数调用和变量声明。&&&&&&&&331–语句块..&&&&一个语句块就是一堆按顺序执行的语句:bok:={ttlc:sa}La允许epysaeet(空语句),可以用分号隔开语句,也可用一个或者连续两个umtttmns分号来作空语句块。sa:=‘’tt:;左括号表示函数调用和赋值语句。这有时会让La的语法产生歧义。比如下面这段代码:ua=b+c(rnoi.rt)'oe)pitrowie(dn'有两种语法分析方式:a=b+cpitoi.rt)'oe)(rnrowie(dn'a=b+c(rnoi.rt)'oe);pitrowie(dn'现今的语法分析器经常以第一种方式解析这类写法。即把左括号解释成函数调用。要避免这种歧义,最好是在那些括号开头的语句前面写个分号:;pitoi.rt)'oe)(rnrowie(dn'一个语句块也可以用下面的方式写成一条语句(写在d和ed之间):onsa:=dbokedtt:olcn&&&&&&&&&&&&显示的语句块对控制变量的作用域很有用。有时也用于在其他语句块中插入(参见se§..)。e334&&&&&&&&rtreun语句&&&&&&&&332–程序块..&&&&cukhn(程序块)就是La中的编译单元。从语法上讲,程序块就是简单的语句块。ucuk:=bokhn:lcLa将程序块当作一个拥有可变参数的匿名函数来处理(参见§..0u341)。所以,程序块可以定义局部变量、接收参数并返回值。此外,这样的匿名函数被编译在一个叫_N(参见EV§.)的外部局部变量的作用域内。产生的函数常用_N作为唯一的自由变量,即便根本22EV没用它。(译者注:说白了就是程序块相当于匿名函数,这些函数默认处于_N的命名空EV间中,使用时要写成_N.**。)EV***程序块可以存在单独的文件中,也可直接写在宿主程序的一个字符串中。执行程序块时,Lau现将它预编译成虚拟机指令,然后由虚拟机的解释器来执行这些指令。程序块也可被预编译成二进制形式;详情查阅程序la。源码形式和二进制形式的程序可以uc相互转换;La会自动识别文件类型并做正确处理。u&&&&&&&&333–赋值..&&&&La允许多重赋值。因此,赋值的语法规定等号左边是一串变量,右边是一串表达式。串中的u元素用等号隔开:sa:=vrit‘’epittt:als=xlsvrit:=vr{,vrals:a‘’a}epit:=ep{,epxls:x‘’x}表达式放在§.讨论。34赋值之前,会先根据左边变量的数量对右边值的数量进行调整。值多了,多余的将被丢弃;值少了,用nl补齐。如果右边最后是一个函数调用结尾,则在数量对齐之前用该函数的全部i返回值替换它(除非函数调用位于括号内:参见§.)。34赋值语句会首先执行所有表达式(两边),然后做纯粹的赋值。因此,下面这段代码i=3iai=i12,[]+,0把a3赋值为2而不是影响a4,因为ai中的i在赋值为4[]0[][]之前已经确定(为3)。同样,这一行xy=yx,,能用来交换x和y的值,而且xyz=yzx,,,,能循环交换x,z的值。,y对全局变量和表的域赋值的含义能通过元表进行更改。对索引变量赋值,即ti=vl等[]a价于stal_vn(,,a)etbeeettivl。(参见§.获取stal_vn函数的完整描24etbeeet述。La中并没有定义该函数,也不能调用。这里仅用于阐述原理。)u对全局变量赋值x=vl等价于_N.=vl(参见§.)。aEVxa22&&&&&&&&&&&&334–控制结构..&&&&i、wie和rpa等结构的意义和语法都很常见:fhleetsa:=wieepdbokedtt:hlxolcnsa:=rpabokutleptt:eetlcnixsa:=ieptebok{lefeptebok[lebokedtt:fxhnlcesixhnlc}eslc]nLa也有fr语句,并有两种形式(参见§..)。uo335控制结构中的条件表达式可以返回任何值。只有fle和nl才被当作条件假。其他任何asi值都被当作条件真(尤其注意数字0和空字符串也为真)。在rpa–ni循环中,内部语句不在utl关键字处结束,而是在条件后面结束。所eetutlni以,条件中可以使用循环体内声明的局部变量。gt语句能将程序控制转移到一个标签处。从语法上讲,La中的标签也被当作是语句:oousa:=gtNmtt:ooaesa:=lbltt:aelbl:=‘:Nm‘:ae::’ae:’标签在被定义的语句块内全部可见,除非在某个嵌套语句块的嵌套函数内定义了一个同名的标签。一个gt只要不进入局部变量作用域,它能跳转到任意可见的标签上。oo标签可空语句叫作visaeet,表示它们本身没有任何行为。odttmnsbek语句用于终止wieeet或fr循环,并忽略循环体中剩下的语句:rahl、rpaosa:=bektt:rabek能结束内层循环。rartreun语句用于从函数或程序块(伪装成函数)中返回值。rtr语句的语法是:eunsa:=rtr[xls][;]tt:eunepit‘’rtr语句只能写作语句块的最后一句。如果在语句块中间确实需要rtr,得显示使用euneun内部语句块。习惯写成drtredoeunn,于是这个rtr在内层语句块中成了最后一句eun(这完全符合前面的规定)。函数可以返回多个值。所以&&&&&&&&335–Fr语句..o&&&&fr语句有两种形式:数字形式和一般形式。o数字形式的fr循环,控制量以等差数列变化来重复运行代码块。语法如下:osa:=frNm‘’ep‘’ep[,epdbokedtt:oae=x,x‘’x]olcnbok从nm等于第一个ep开始重复运行。不断以第三个ep作为步长直到等于第lcaexx二个ep才停止循环。更准确的说,一条fr语句类似于:xofrv=e,e,edbokedo123olcn等价于如下代码:do&&&&&&&&&&&&lclvrlmtse=tnme(1,tnme(2,tnme(3oaa,ii,tpoubre)oubre)oubre)int(aadlmtadse)teerr)edfovrniintphnro(nwie(tp0advrlmto(tp0advrlmtdhlsena=ii)rse=na=ii)olclv=vroaaboklcvr=vr+seaatpednedn注意事项:所有三个控制表达式在循环前仅被求值一次。它们的结果必须为数字。vrii和se都是不可见变量。这里的名字仅用作解释说明。a、lmttp如果省略第三个表达式(步长),则步长默认为1.可以使用bek来跳出fr循环。rao循环量v是循环内部的局部变量:不能在fr循环结束或跳出后继续使用它的值。如o果确实需要该值,请在循环退出或跳出之前把值赋给另外的变量。一般形式的fr语句通过叫ieaosotrtr(迭代器)的函数工作。每一次迭代,都会调用迭代器来产生一个新值。当新值为nl时,循环停止。一般形式的fr循环语法如下:iosa:=frnmlsiepitdbokedtt:oaeitnxlsolcnnmls:=Nm{,Nm}aeit:ae‘’ae一条fr语句类似于ofrvr1··vrniepitdbokedoa_,·,a_nxlsolcn等价于如下代码:dolclfsvr=epitoa,,axlswietudhlreolclvr1··vrn=fsvroaa_,·,a_(,a)ivr1=nltebekedfa_=ihnranvr=vr1aa_boklcednedn注意事项:epit仅被求值一次。其结果有三:一个xlsieao(迭代器)trtr函数,一个saett(状态)和首个ieaovral(迭代量)的初始值。trtraibef、s和vr都是不可见变量。这里的名字仅用作解释说明。a可以使用bek来跳出fr循环。rao循环量vri是循环体内的局部变量:不能在fr循环结束后继续使用它的值。如果a_o确实需要该值,请在循环退出或跳出之前把值赋给另外的变量。&&&&&&&&336–函数调用作为语句..&&&&为了允许使用可能的副作用,函数调用可当作语句执行:sa:=fntocltt:ucinal这种情况下,所有的返回值均被丢弃。关于函数调用的说明在§..。349&&&&&&&&&&&&337–局部声明..&&&&局部变量可在语句块内任何地方声明。声明的同时可以进行初始化赋值操作:sa:=lclnmls[=epittt:oaaeit‘’xls]如果做了,初始化赋值操作在语法上等同于多重赋值(se§..)。否则,所有变量均被e333初始化为nli。程序块也是语句块(参见明。§..),因此局部变量可在任何显示语句块之外的程序块中声332&&&&&&&&局部变量的可见性规则在§.说明。35&&&&&&&&34–表达式.&&&&La中的基本表达式如下:uep:=peiepx:rfxxep:=nl|fle|tux:iasreep:=Nmex:ubrep:=Srnx:tigep:=fntodfx:ucineep:=tbeosrcox:alcntutrep:=‘.’x:..ep:=epbnpepx:xioxep:=uoepx:npxpeiep:=vr|fntocl|‘’ep‘’rfxx:aucinal(x)数字和文字串的说明在§.;变量的说明在§.;函数定义的介绍在§..0函数3132341;调用的说明在§..;表的构造器在§..。由三点('.'349348..)表示的可变参数表达式只能用于有可变参数的函数中:详见§..0341。二元运算包括算术运算(§..)、关系运算(§..)、逻辑运算(§..)以及连接运算(§..)。一元运算包括取负(§..)、nto(§..)和取长度(§..)。346函数调用和参数可变的表达式均可返回多个值。如果将函数调用作为一条语句使用(参见§..),则其返回值列表与0336对齐,即丢弃所有返回值。如果一个表达式是一串表达式中最后的/唯一的元素,则不会有对齐操作(除非该表达式位于括号内)。在其他情况,La会u将返回结果表与1对齐,即丢弃第一个返回值外的其他值;如果没有返回值,La自动添加一u个nli。以下是一些示例:f)(gf)x((,)gxf)(,()abc=f)x,,(,ab=..,.abc=xf),,,(abc=f),,(rtrf)eun(rtr..eun.&&&&&&&&-调整成返回0个结果-f)被调整成返回1个结果-(-g被传入x和所有f)返回值(-f)被调整成返回1个结果(c就成了nl-(i)-a被赋值为可变参数中的第一个,-b为第二个(如果可变参数没有对应参数,a和b都为nl)i-f)被调整成返回2个结果-(-f)被调整成返回3个结果-(-返回f)所有结果(-返回可变参数接收到的所有参数-&&&&&&&&&&&&rtrxyf)eun,,({(}f){.}..{(,nlf)i}&&&&&&&&-返回x、和所有f)返回值、y(-为f)的所有返回值创建一个列表(-为可变参数接收到的所有参数创建一个列表-f)被调整成返回1个结果-(&&&&&&&&任何由括号括起来的表达式只被当成一个值。因此,((,,)永远都只能是个单值,即使fxyz)f返回了多个值。(((,,)的值是f返回的第一个值;如果f没有返回值,则为fxyz)nli。)&&&&&&&&341–算术运算符..&&&&Lau支持常用算术运算符:+(加)、(减)、*(乘)、/(除)、%(取模)和^(幂);还有一元(取负)操作。如果运算对象是数字,或是可转换为数字的字符串(参见§..),那就是单纯的数学运算。求幂操作可用于任何指数,比如x(05计算出x342^-.)平方根的倒数。取模操作的定义是a%b=a-mt.lo(/)b=ahforab*Tai,iitermidroadvsotarudteqoinhtstsheanefiiinhtonshutettwrsmnsifnt.oadiuniiy&&&&&&&&342–强制转换..&&&&La在运行时提供字符串与数字之见的自动转换。在La的词法分析下,任何适用字符串的uu算术运算都会尝试把字符串转化为数字。(字符串首尾可能有空白和标记。)反过来,任何需要字符串的时候,数字就会被转化成字符串。想要完全掌控数字转化字符串,可以使用srn库中的fra函数(参见srn.omttigomttigfra)。&&&&&&&&343–关系运算符..&&&&La中的关系运算符有u==~===&&&&&&&&运算结果为fle或者tu.asre相等判断(=)首先比较运算对象的类型。如果类型不同,则结果为fle=as。否则才比较对象的值。数字、字符串用常规方式比较。而表、用户数据和线程得靠引用来比较:两个对象只在指向(引用)同一个对象才判为相等。每一次创建的新对象(表、用户数据或者线程)都与前面存在的对象不同。对相同引用的闭包互相相等。而任何可检测出不同(行为不同、定义不同)的闭包自然也不相等。当然,你可以使用"q元方法(参见§.)来改变表与用户数据的比较操作。e"24§..的转换规则不适用于相等性判断操作。因此,342t""代表的是表中不同的元素。[0]~操作符刚好与=意义相反。==大小比较的规则如下:如果比较参数都为数字,则做数字比较;如果都为字符串,则按字符串比较规则进行;否则,La就尝试使用"t或"e元方法(参见§.)。ab被翻ul"l"24译成ba,ab被翻译成ba==。""=值为0=0fle[]和as。t0&&&&&&&&344–逻辑运算符..&&&&La中的逻辑运算符有adrun、o、和nto。类似控制结构(参见§..),所有的逻辑操334&&&&&&&&&&&&作符只将fle和nl当作假,其他所有情况都为真。asi取反操作nt只返回fle或者tu。与操作ad在第一个参数为fle或nl时oasrenasi返回第一个参数,否则返回第二个参数。或操作o在第一个参数不是nl和fle时返rias回第一个参数。否则返回第二个参数。ad和o都使用短路求值法;意思是第二个参数只nr在必要时才求值。下面是些例子:1o20r01oerr)0rro(nlo""iranlad1in0fleaderr)asnro(fleadnlasnifleonlasri1ad20n0-1-0-1-0-""-a-nl-i-fle-as-fle-as-nl-i-2-0&&&&&&&&(本手册中的-符号指代前面表达式的结果。)-&&&&&&&&345–连接操作..&&&&Lau使用两个点('.)表示字符串连接操作。如果操作对象是字符串和数字,则会按照.'§..提到的规则将他们转化为字符串。不然就调用_cna元方法(参见§.)。342_oct24&&&&&&&&346–取长度操作符..&&&&取长度的操作符是一元运算符#。字符串的长度是其字节数(就是一个字符表示一个字节算出的长度)。程序里可通过_ln元方法(参见§.)来修改除字符串外所有值的取长度操作行为。_e24除了已知的_ln元方法,表t的长度只在它是顺序表时有定义。而且其键值要按_e{.n递增,则整数n就是长度。注意像下面这样的表1.}{02,nl4}1,0i,0不是顺序表,因为它有第4个键,却没有第3个键。而非数字键则不影响判断表是否为顺序表。&&&&&&&&347–优先级..&&&&La中操作符优先级如下表所示,从低到高排列:uoradn..+*nto^&&&&&&&&/#&&&&&&&&=&&&&&&&&=&&&&&&&&~=&&&&&&&&==&&&&&&&&%-(nr)uay&&&&&&&&通常,可以在表达式中使用括号来改变优先级。连接符('.)和求幂(''.'^)从右往左结合。其他二元运算符是从左往右的。&&&&&&&&348–表的构造器..&&&&&&&&&&&&表的构造器是一对用于创建表的表达式。每执行一次构造器就创建一张新表。构造器可用于创建空表或者创建的同时初始化一些域。构造器的语法如下:tbeosrco:=‘’[ills]‘’alcntutr:{fedit}fedit:=fed{ilspfed[ilspills:ilfedeil}fede]fed:=‘’ep‘’‘’ep|Nm‘’ep|epil:[x]=xae=xxfede:=‘’|‘’ilsp:,;每一个[x1=ep形式的域都将为新表加入一个键为ep值为ep的元ep]x2x1x2素。nm=ep形式的域等价于[nm"=epaex"ae]x。而ep形式的域等价于[]=xiepx,其中的i为从1开始的连续整数。其他格式的域不影响计数。比如,a={[()=g""""x=1fx,[0=2;4}f1];x,y;,()3]35等价于dolclt={oa}tf1]=g[()t1=""[]xt2=""[]ytx=1.t3=fx[]()t3]=2[03t4=4[]5a=tedn&&&&&&&&-1tep-sx-2dep-nx-t""=1-[x]-3dep-rx-4hep-tx&&&&&&&&如果列表中最后一个域形式为epx,而且这个表达式是个函数调用或者参数可变,那么表达式的所有返回值将按顺序插入列表(参见§..)。349域的列表可以有一个可选的尾部分隔符,这样方便机器生成代码。&&&&&&&&349–函数调用..&&&&La中的函数调用语法如下:ufntocl:=peiepagucinal:rfxxrs在函数调用中,首先对peiep和ag求值。如果peiep的值的也是rfxxrsrfxxfnto(函数),则用相应参数调用该函数。否则,调用peiep的"al元方ucinrfxxcl"法,并将peiep的值作第一个参数,再跟其他原始参数(参见§.)。rfxx24这种形式fntocl:=peiep‘’Nmagucinal:rfxx:aers可以用来调用“方法”。vnm(,rs.aevag)vnm(rs,这种写法只是语法糖便利。:aeag)参数的语法如下:ag:=‘’[xls]‘’rs:(epit)ag:=tbeosrcors:alcntutrag:=Srnrs:tig所有参数表达式都在函数调用之前被求值。ffed}{ils形式的函数调用也只是只在v仅被求值一次的时候可以写成&&&&&&&&&&&&f{ils)(fed}形式的语法糖写法;即参数列表是个新表。而fsrn''tig(或者fsrn"或者f[tig]"tig[srn])一类的调用形式也只是f'tig)的语法糖写法;即(srn'参数表是单一的文字串。La中将rtrfntocl这种形式叫ticl(尾调用)。La实现的是完全ueunucinalalalu尾调用(也叫完全尾递归):在尾调用中,被调用的函数重用调用它的函数的堆栈。因此,程序可执行的嵌套尾调用没有层数限制(即无限尾调用)。而尾调用也会删除任何关于调用它的函数的调试信息。注意,尾调用只能出现在特殊的语法下:rtr只有一个函数作为参数;eun这使得调用函数能明确返回被调函数的结果。所以,下面这些都不是尾调用:rtr(()eunfx)rtr2*fxeun()rtrxfxeun,()rtr()eunrtrxofxeunr()-rslsajset1-eutdutdo-adtoarsls-diinleut-rslsdsadd-euticre-rslsajset1-eutdutdo&&&&&&&&341–函数定义..0&&&&函数定义的语法如下:fntodf:=fntofnbducine:ucinucoyfnbd:=‘’[als]‘’bokeducoy:(prit)lcn下面的语法糖写法可以简化函数的定义:sa:=fntofnnmfnbdtt:ucinucaeucoysa:=lclfntoNmfnbdtt:oaucinaeucoyfnnm:=Nm{.Nm}[:Nm]ucae:ae‘’ae‘’ae语句fntof(bdeducin)oyn转化成f=fnto(bdeducin)oyn语句fntotabcf(bdeducin....)oyn转化成tabcf=fnto(bded....ucin)oyn语句lclfntof(bdedoaucin)oyn转化成lclff=fnto(ucin)oyn而不是转化成lclf=fnto(bdedoaucin)oyn(这只在函数体内需要引用f时才有点区别。)&&&&&&&&&&&&函数定义是一个可执行表达式,执行结果是个类型为fnto的值。Laucinu预编译cukhn(程序块)时,它的所有函数体也会被预编译。每当La执行函数定义,函数才被uisatae(实例化)(也叫coe(闭合))。这个函数实例(也叫couentnitdlsdlsr(闭包))才是表达式最终的值。形参(函数定义的参数)作为局部变量由实参(函数调用时传入的参数)的值初始化:prit:=nmls[,‘.’|‘.’als:aeit‘’..]..调用函数时,实参列表会根据形参列表的长度做调整,除非遇上了形参列表以三点('.'..)结尾的vrrfnto(变参函数)。变参函数不会调整实参列表,而是收集所有额外的aagucin实参然后通过vrrepeso(变参表达式)(也写成'.'aagxrsin..)传给函数。变参表达式的值就是包含全部额外实参的列表,这类似返回多值的函数。如果变参表达式在另一个表达式中使用,或者是位于一堆表达式的中间,那么它返回的值会被调整成单个元素。而若是该表达式是那堆表达式的最后一个,那就不用做调整了(除非最后的表达式位于括号之内)。先看下面这个函数定义的例子:fntofabeducin(,)nfntogab..educin(,,.)nfntor)rtr123educin(eun,,n然后有如下实参到形参和变参表达式的映射关系:CLALf3()f34(,)f345(,,)fr)1)((,0fr)(()g3()g34(,)g3458(,,,)g5r)(,()PRMTRAAEESa3bnl=,=ia3b4=,=a3b4=,=a1b1=,=0a1b2=,=a3bnl..-=,=i,.a3b4=,=,..-.a3b4=,=,..-.a5b1=,=,..-.(ohn)ntig(ohn)ntig5823&&&&&&&&rtr语句用于返回结果(参见§..)。如果执行到函数结尾没发现一个rtr语eun334eun句,则函数没有结果返回。一个函数能返回的结果数量因系统不同而限制不同,但肯定大于10。00clnoo(冒号)语法用于定义sl。所以,如下语句efmtosehd(方法)。意思是函数有一个额外的隐式参数&&&&&&&&fntotabcf(aasbdeducin...:prm)oyn是如下写法的语法糖(简写)形式tabcf=fnto(efprm)bded....ucinsl,aasoyn&&&&&&&&35–可见性规则.&&&&La是门有词法域的语言。一个局部变量的作用域开始于声明后的第一条语句,结束于包含该u声明的最内层语句块中的最后一条非空语句。思考下面的例子:&&&&&&&&&&&&x=10dolclx=xoapitxrn()x=x1+dolclx=x1oa+pitxrn()ednpitxrn()ednpitxrn()&&&&&&&&-全局变量-新语句块开始-新的''x,值为10-1-0-另一个语句块开始-另一个''x-1-2-1-1-1(此为全局的那一个)-0&&&&&&&&留心注意,类似lclx=x的声明,新声明的x还不在作用域内(译者注:作用域开始oa于声明语句的下一句,不包括声明语句本身),所以后面的x还是指那个外层变量。因为有词法域规则,所以函数可随意访问定义在其作用域内的局部变量。局部变量被更内层的函数使用,则称其为uvlepau,或者是etralclvral(外层局部变量)。xenloaaibe要注意,每执行一次lcl语句都会定义新的局部变量。思考下面的例子:oaa={}lclx=2oa0fri11do=,0olcly=0oaai=fnto(yy1rtrxyed[]ucin)=+;eun+nedn这个循环创建了十个coue(闭包,这里指十个匿名函数实例)。每一个coue使用lsrslsr的都是不同的y,相同的x。&&&&&&&&4–应用程序接口(AIP)&&&&本章描述La中的CAIuP,就是那些用于宿主程序和La通讯的C函数。所有AI函uP数和相关的类型/常量定义都在lah头文件中。u.虽然我们说的是“函数”,但某些AI其实是以宏的形式提供的。除非特别说明,所有这些宏P对它们的参数都只使用一次(除了常为La状态机的第一个参数),所以不用担心这些宏的u展开会隐藏一些副作用。在大部分C库中,La的AI函数都不会检查参数的有效性和一致性。但你可以在编译uPLa时通过内置的宏LAUEAIHC来改变这个设定。uU_S_PCEK&&&&&&&&41–栈.&&&&La使用一个vrulsakuitatc(虚拟栈)来与C传递值。栈内每个元素都代表一个Lau值(nli、数字、字符串等等)。任何时候La调用C函数,被调函数都会获得一个新栈。该栈独立于以前的栈,也独立于u函数在C中的栈。这个栈初始时包含传递给C函数的所有参数,然后C函数把要返回给调用者的结果也压入其中(参见laCucinu_Fnto)。&&&&&&&&&&&&为方便起见,AI中大部分查询操作都不严格遵守常规栈的规则。而是可以通过一个idxPne来索引栈中任意元素。一个正的索引值表示了栈中的绝对位置(从1开始);负的索引值表示了相对栈顶的偏移量。具体来说,如果栈有n个元素,则索引1代表第一个元素(就是第一个压入栈的元素,在栈底),索引n代表最后一个元素;而索引-也代表最后一个元1素(就是栈顶元素),索引-代表第一个元素。n&&&&&&&&42–栈大小.&&&&与La交互时,要负责确保一致性。尤其要负责控制栈的溢出情况。在压栈前可以使用函u数lacektc来检查栈中是否拥有足够的位置。u_hcsakLa无论何时调用Cu,它都确保栈至少拥有LAMNTC个位置。LAMNTC被定U_ISAKU_ISAK义为2。所以,只要不是循环压栈,通常无需担心栈空间。0调用一个返回结果数量不定的La函数(参见lacl)时,La会确保栈空间足够容纳uu_alu所有返回结果,但不确保还有更多额外空间。所以,在调用了这种函数后,继续压栈前最好使用lacektc检查一下栈空间。u_hcsak&&&&&&&&43–有效索引与合格索引.&&&&AI中的任何能接受栈索引的函数只接受vldidcsPainie(有效索引)或acpalcetbeidcsnie(合格索引)。有效索引指的是指向栈内真实位置的索引,意思是其值在1和栈顶之间(即1asidx≤tpb(ne)o)。通常,函数要修改某个索引项的值时就要求有效索引。≤&&&&&&&&除非另有提示,任何接受有效索引的函数同时也接受ped-nie(伪索引),帮助Csuoidcs代码访问一些不在栈内的La值。伪索引可用于访问注册表和C函数的uvle(参见upaus§.)。44那种不需具体位置只要栈内一个值的函数(比如,查询函数)可以用合格索引进行调用。一个acpalidxcetbene(合格索引)可为任意有效索引,包括伪索引,也可为栈空间内栈顶之后的任和正索引,意味着索引值最大为栈的大小。(注意,0从来都不是合格索引。)除非特殊说明,AI中的函数只在合格索引下有效工作。P合格索引在查询栈的时候避免了额外的栈顶判断。例如,一个C函数可以查询它的第三个参数而不必先检查是否存在第三个参数,意思是不必检查索引3是否有效。对于那些能用合格索引调用的函数,任何无效索引都被当作成包含一个虚拟类型为LATOE的值,其行为类似一个nl值。U_NNi&&&&&&&&44–CCoue(闭包).lsrs&&&&创建一个C函数时,可能会关联一些值,因此就创建了一个Ccouelsr(参见lapsclsr),那些值就叫uvle,并且可在函数被调用时访问到。u_uhcouepaus每当调用C函数时,它的uvlepau就被放在特定的伪索引处。这些伪索引由宏lauvlene产生。与函数相关的第一个值在lauvlene()处,并依此u_pauidxu_pauidx1类推。当n大于当前函数中uvle的数量(小于26pau5)时,lauvlene()u_pauidxn将产生合格但无效的索引值。&&&&&&&&&&&&45–注册表.&&&&La提供一个rgsr(注册表),是一张用于C代码保存所需La值的预定义表。注ueityu册表位于伪索引LARGSRIDX处,这是一个有效索引。任何C库都可以向表中保U_EITYNE存数据,只是在选择键的时候要避免和其他库冲突。一般来说,可以用包含库名的字符串,或者用代码中一个C对象的地址做成的简易uedt,或者用代码中创建的任意La对sraau象。(译者注:键的形式很随意,不局限于字符串,可详细参考tbe类型。)与全局变量al一样,以下划线开头跟大写字母的字符串键是为La保留的。u注册表内的整数键用作引用机制,在辅助库中实现时也使用一些预定义值。因此,整数键不能做他用。创建一个新的La状态机时,它的注册表来自于一些预定义的值。这些预定义值作为常量定u义在lahu.,由整数键进行索引。下面的常量定义:LARD_ANHEDU_IXMITRA:该索引下,注册表拥有状态机的主线程(主线程与状态机同时被创建)。LARD_LBL:该索引下,注册表拥有全局环境。U_IXGOAS&&&&&&&&46–C中的错误处理.&&&&在内部实现中,La使用C的lnjp机制来处理错误。(如果La和C+编译,也uogmu+可以选择使用异常;查阅源码内的LA_HO。)La面对任何错误(比如内存分配错UITRWu误、类型错误、语法错误和运行时错误)都会产生一个错误;就是做一个lnogjm。在uppoetdevrnetrtceniomn(保护环境)下使用stm可以设置一个恢复点;任何错误都ejp会跳转到最近活动的恢复点上。如果错误发生在保护环境之外,La会调用一个pnc函数(参见laapncuaiu_tai),然后调用aotbr来退出宿主程序。pnc函数也可以不返回来避免这种退出(比如,做一个ailnjm跳转到La之外你自己的恢复点上)。ogupupnc函数运行起来就像一个消息处理器(参见§.);尤其是错误消息位于栈顶时。问题ai23在于没法保证栈的空间。向栈内压入任何东西,pncai函数都需要先检查可用空间(参见§.)。42AI中大部分函数都能抛出错误,比如内存分配错误。每个函数的文档内具体指示了它是否能P抛出错误。在C函数内可以通过调用laerr来抛出一个错误。u_ro&&&&&&&&47–C中的挂起处理.&&&&在内部实现中,La使用Clnjp机制来挂起协程。因此,如果函数fo调用一个u的ogmoAI函数,而该AI函数挂起了(直接或间接挂起),La没法给fo返回任何东西,因PPuo为lnjp已将它的fae从C栈中移除了。ogmrm为避免这类问题,每当穿过AI调用而挂起时PLa都会弹出错误,只除了这三个函u数:layed、laclk和lapal。这三个函数接收一个cniutou_ilku_alu_clkotnainfnto(继续函数)(有一个参数叫kucin)用于挂起后继续执行。我们需要用一些术语来解释这个cniuto。首先,我们有一个由La调用的C函otnainu&&&&&&&&&&&&数,它叫oiiafnto(原始函数)。这个原始函数随后在CAI内调用了前面三rgnlucinP个函数中的一个,叫clefnto(被调函数),然后当前线程被挂起。(挂起可能发aleucin生在被调函数是layed时,或者被调函数是laclk或lapal二者其一而u_ilku_alu_clk且被自己挂起。)假定是在执行被调函数时运行的线程被挂起。等线程恢复后,它最终会结束运行被调函数。然而,被调函数此时却没法返回给原始函数,因为它在C栈中的fae在挂起时给销毁了。rm于是,La调用当作参数传递给被调函数的cniutofnto(继续函数)。顾名uotnainucin思义,继续函数可以继续原始函数的工作。La将继续函数看作原始函数。继续函数接收来源于原始函数的相同La栈,在被调函数返uu回后也(与原始函数)处于一样的状态。(例如,laclk调用一个函数后,它的参数均u_al从栈中移除并被替换成那个函数的返回结果。)继续函数也拥有相同的uvlepau。无论继续函数返回什么值,都会被La当作是由原始函数返回的一样进行处理。u在La状态机中,原始函数与它的继续函数唯一的不同就是lagtt返回结果的不uu_ecx同。&&&&&&&&48–函数与类型.&&&&我们在这儿按字母顺序列出CAI中所有的函数与类型。每一个函数都有一个类似右边这样P[o+,x-,p]的标记:第一个字段,o,表示函数从栈中弹出多少个元素。第二个字段,p,表示函数向栈压入多少个元素。(所有函数都会在弹出参数后再压入结果。)形如xy这样的字段表示函数可以压入(弹出)x或y个元素,由具体情况决定;|而问号''表示我们无法只通过观察参数来得知函数弹出/?压入多少个元素(比如,它们依赖与栈中的内容)。第三个字段,x,用于告知函数是否抛出错误:''表示从不抛出任何错误;''表示可能e抛出错误;''表示有目的地抛出一个错误。vlaasneu_bidxitlaasne(u_tt*,nu_bidxlaSaeLnd)将合格索引ix转化为一个绝对索引(就是不依赖栈顶)。dlaAlcu_lotpdfvi*(laAlc(od*dyeeod*u_lo)viu,vi*t,odprsz_oieietsz,sz_ietsz)Tetpotemmr-loainfntouebLasae.Tehyefheoyalctoucinsdyuttshalctrfntomspoieafntoaiysmlrtralcbtloaoucinutrvducinltiiaoelo,unteatytesm.Isagmnsaeu,aoaupitrpsetoxclhaetrueu_esaeprt,apitronetotehboklcbigenalctdralctdfedoieteoiiaszotebokoloae/eloae/sz,hrgnliefhlcrsmcdaotwaibigalctdnietenwsz,heiefhboklc.WeprintNL,oieiteszotebokpitdbprtahntsoULszshiefhlconeyt,ht&&&&[0+,–-,0]&&&&&&&&&&&&i,teszgvnweiwsalctdoralctdshieiehntaloaereloae.WepriNL,oieecdsteknoojctaLaihntsULsznoehidfbethtusalctn.oieiayoLATTIGLATAL,LATUCINloaigszsnfU_SRN,U_TBEU_FNTO,LATSRAAoLATHEDwe(nolwe)LaicetnanwU_UEDT,rU_TRAhnadnyhnusraigeojcotatp.WeoieismohrvleLaialctnbetfhtyehnszsoeteau,usloaigmmrfrsmtiges.eoyooehnleLaasmstefloigbhvofotealctrfnto:usueholwneairrmhloaoucinWenieizr,tealctrsolbhvlkfeadrtrhnszseohloaohudeaeiereneunNL.ULWenieintzr,tealctrsolbhvlkralcTehnszsoeohloaohudeaeieelo.halctrrtrsNLiadoliicnoflilterqetLaloaoeunULfnnyftantuflheus.uasmstatealctrnvrfisweoieniesuehthloaoeealhnsz=sz.Hriasmlipeettofrtealctrfnto.Iiueieesipemlmnainohloaoucintssdnteaxlaylbaybla_esaehuiirirryuLnwtt.saivi*_lo(od*dvi*t,sz_oiettcodlalcviu,odprietsz,sz_nie{ietsz)((odoie/ntue*vi)dvi)*osd/i(sz=0{fnie=)fe(t)rtrNL;eunUL}eunelo(t,sz)}NttaSadrCesrstafe(ULhsnefcadtaoehttnadnuehtreNL)aofetnhtralcNL,sz)ieuvlntmlo(ie.Ticdasmstaelo(ULiesqiaetoalcsz)hsoesuehtralcdentfiwesrnigabok(lhuhSadrCdeeloosoalhnhiknlc.Atogtnadosntesrtibhvo,isestbasfasmto.onuehseairtemoeaesupin)laaihu_rtvilaaih(u_tt*,ito)odu_rtlaSaeL&&&&[(|)+,e-21,1]&&&&&&&&Promaaiheioeainoetetovle(roeitecsefrsnrtmtcprtovrhwauson,nhaeongto)atetpotesakwttevleatetpbigtefeainthofhtc,ihhauthoenhscnoeadppteevle,adpsetersloteeodprn,oshsausnuhsheutfhoeainTefntoflostesmnisotecrepnigLaprto.hucinolwheatcfhorsodnuoeao(hti,imyclmtmtos.prtrtastaaleaehd)Tevleoomsboeotefloigcntnshaufputenfholwnosat:LAOADpromadto()U_PD:efrsdiin+LAOSBpromsbrcin()U_PU:efrsutatoLAOMLprommlilcto()U_PU:efrsutpiain*LAODVpromdvso()U_PI:efrsiiin/LAOMDprommdl()U_PO:efrsouo%LAOPWpromepnnito()U_PO:efrsxoetain^LAOUMprommteaiangto(nrU_PN:efrsahmtcleainuay)laapncu_tai&&&&&&&&&&&&laCucinlaapnc(u_tt*,laCucinpnc)[0+,–u_Fntou_tailaSaeLu_F-,0]Stanwpncfntoadrtrsteodoe(e§.)eseaiucinneunhlnse46.laclu_al&&&&[vilacl(u_tt*,itnrsitneut)-nrs1,+rslseodu_allaSaeLnag,(ag+)neut,]&&&&&&&&Clsafnto.alucinTclafntoyumsuetefloigpooo:frtteoalucinoutsholwnrtclis,hfntotbcleipseottesakte,teagmnhnhruetotefntoaepseidrcodrtai,tefrthtshisruetspsefrtFnrsitenmeoagmnsuhdis.ialoalu_alagshubrfruettayupseottesakAlagmnsadtefntovleaehtouhdnohtc.lruetnhucinaurppefotesakwetefntoicle.TefntorslsopdrmhtchnhucinsaldhucineutaepseottesakwetefntortrsTenmeoruhdnohtchnhucineun.hubrfrslsiajsetneut,ulsneutiLAMLRTItieutsdutdorslsnesrslssU_UTE.nhscs,alrslsfotefntoaepse.LatkscrtateaeleutrmhucinruhduaeaehthrtrevleftittesaksaeTefntorslsaepseeundausinohtcpc.hucineutruhdottesakidrcodr(hfrtrslipsefrt,snohtcnietreteiseutsuhdis)otaatrtecltelsrsliotetpotesakhtfehalhateutsnhofhtc.Ayerrisdteclefntoipoaaeuwrs(ihanroniehalducinsrpgtdpadwtlnjp.ogm)TefloigeapesoshwtehspormcndteeuvlntholwnxmlhwohotrgaaohqiaetotiLacd:hsuoea=f"o"tx1)(hw,.,4HriiiCeetsn:lagtlblL"";u_egoa(,f)/fntotbcle**ucinoeald/lapssrn(,"o";u_uhtigLhw)/1tagmn**sruet/lagtlblL"";u_egoa(,t)/tbetbidxd**aloenee/lagtil(,-,"";u_efedL1x)/psrslotx(nag**uheutf.2dr)/larmv(,-)u_eoeL2;/rmv''fotesak**eoetrmhtc/lapsitgrL1)u_uhnee(,4;/3dagmn**rruet/lacl(,31;u_alL,)/cl''wt3agmnsad1rsl**alfihruetneut/lastlblL"";u_egoa(,a)/stgoa''**elbla/Nttatecdaoei"aacd:aisedtesakibctoehthoebvsblne"ttn,htcsakoisoiiacniuainTiicnieegopormigpatc.trgnlofgrto.hssosdrdodrgamnrcielaclku_al&&&&gvilaclk(u_tt*,itnrsitneut,an+t,+rslseodu_allaSaeLnag,nrsl[(isc),neut,]snrt1xlaCu_Fnto)&&&&&&&&Tifntobhvseatylklacl,btalwteclehsucineaexclieu_aluloshaldfntotyed(e§.)ucinoilse47.laCucinu_Fntotpdfit(laCucin(u_tt*)yeen*u_Fnto)laSaeL;&&&&&&&&&&&&TpfrCfntosyeoucin.IodrtcmuiaepoelwtLaaCfntomsuetenreoomnctrpryihu,ucinutshfloigpooo,wihdfnstewyprmtradrslsaeolwnrtclhceiehaaaeesneutrpse:aCfntorcieisagmnsfoLaiissakiasducineevstruetrmunttcndrcodr(hfrtagmnipsefrt.S,wetefntoietreteisruetsuhdis)ohnhucinsat,lagto()rtrstenmeoagmnsrciebtetrsu_etpLeunhubrfrueteevdyhfnto.Tefrtagmn(fayiaidx1adislsagmnucinhisruetin)stnentatruetiaidxlagto()TrtrvletLaaCfntojsstneu_etpL.oeunausou,ucinutpseteottesakidrcodr(hfrtrslipseuhshmnohtc,nietreteiseutsuhdfrt,adrtrstenmeorslsAyohrvleitesakis)neunhubrfeut.nteaunhtcblwterslswlbpoeldsaddbLaLkaLafnto,eoheutilerpryicreyu.ieuucinaCfntoclebLacnasrtrmnrslsucinaldyualoeunayeut.Aaeapetefloigfntorcieavralnmeosnxml,holwnucineevsaibeubrfnmrclagmnsadrtrsteraeaeadsmueiaruetneunhivrgnu:saiitfo(u_tt*){ttcnolaSaeLitn=lagto()nu_etpL;/nmeoagmns**ubrfruet/laNmesm=0u_fr(=1ini+{=;+)i(lainme(,i){f!u_subrL)lapssrn(,"norcagmn";u_uhtigLicretruet)laerrL;u_ro()}sm+latnme(,i;u=u_oubrL)}lapsnme(,u_uhubrLu/)/frtrsl**iseut/lapsnme(,u_uhubrLu)/scnrsl**eodeut/rtr2/nmeorsls**ubrfeut/}lacektcu_hcsakitlacektc(u_tt*,nu_hcsaklaSaeLnxr)&&&&[0+,–-,0]&&&&&&&&EsrstateeaealatetafesaksositesakInuehthrrtesxrretcltnhtc.trtrsfleiicnoflilterqetbcueiwudcueeunasftantuflheus,eastolastesaktblretaafxdmxmmsz(yialalatahtcoeagrhnieaiuietpclytesfwtosneeet)obcueicnoalctmmrfrtenwehuadlmnsreastantloaeeoyohesaksz.Tifntonvrsrnstesakitesafhtcsaraylretatenwsz,iilfucagdledagrhnheietsetnhne.lacoeu_lsvilacoe(u_tt*)odu_lslaSaeL;&&&&[0+,–-,0]&&&&&&&&DsryalojcsitegvnLasae(alntecrepnigetoslbetnhieuttclighorsodngraecletomtmtosiayadfesaldnmcmmrueabg-olcineaehd,fn)nrelyaieoysdbtisaeOsvrlpafrsyumyntnetcltiyhstt.neealtom,oaoedoalhsfnto,bcuealrsucsaentrlyrlaewetehsucineasleoreraualeesdhnhotpormed.Oteohrhn,ln-unnpormtacetrgansnhteadogrnigrgashtraemlilsae,scadeosowbsresmgtnetcoeutpettsuhsamnreevr,ihedolssaeasoateaentnee.ttssonshyroedd&&&&&&&&&&&&lacmaeu_opritlacmae(u_tt*,itidx,itidx,ito)[0+,enu_oprlaSaeLnne1nne2-,0]CmaetoLavle.Rtrs1itevleaidxidxstsisoprswuauseunfhautnene1aifeowecmaewttevleaidxidx,floigtesmnisphnoprdihhautnene2olwnheatcotecrepnigLaoeao(hti,imyclmtmtos.fhorsodnuprtrtastaaleaehd)Ohriertrs0Asrtrs0iayoteidcsinnvldtewseun.loeunfnfhniesoai.Tevleoomsboeotefloigcntnshaufputenfholwnosat:LAOE:cmaefreult(=U_PQoprsoqaiy=)LAOL:cmaefrlsta()U_PToprsoeshnLAOL:cmaefrlsoeul(=U_PEoprsoesrqa)lacnau_octvilacna(u_tt*,odu_octlaSaeLn)&&&&[n+,e-,1]&&&&&&&&Cnaeaetenvleatetpotesakppte,adlaeoctntshausthofhtc,oshmnevsterslatetpIni1terslitesnlvleoteheuttho.fs,heutshigeaunhsak(hti,ini0terslitetctashucinosohn)fs,heutshepysrn.CnaeainipromdfloigteuulsmnisomttigoctntosefreolwnhsaeatcfLa(e§..)use345.lacpu_oyvilacp(u_tt*,odu_oylaSaeLnrmd,nod)&&&&[0+,–-,0]&&&&&&&&Mvsteeeetaidxfoixittevldidxtixwtotoehlmntnermdnohaineodihusitnayeeet(hrfrrpaigtevleatapsto)hfignlmnteeoeelcnhauthtoiin.lacettbeu_raealvilacettbe(u_tt*,itnr,itne)odu_raeallaSaeL&&&&[0+,e-,1]&&&&&&&&CetsanwepytbeadpseiottesakPrmtrnriraeemtalnuhstnohtc.aaeearsahnfrhwmprmtritooaylmnshalilaeseuneaaeeneiahnfrhwmnohreeettetbewlhv.LamyrcsitooaytelmnshalilaeuaueteehnstpeloaemmrfrtenwtbeTipeshsitoralcteoyoheal.hsralctoiueufrpromneweyukoiavnehwmnloainssfloefrachnonwndacoayeeettetbewlhv.Ohrieyucnuetefntolmnshalilaetewsoashucinlanwal.u_etbeladmu_upitladm(u_tt*,laWiewie,vi*nu_uplaSaeLu_rtrrtroddt)&&&&[0+,e-,0]&&&&&&&&DmsafntoaabnrcukRcieaLafntootetpoupucinsiayhn.eevsuucinnhoftesakadpoueabnrcukta,ilaeaanrslsiahtcnrdcsiayhnhtfoddgi,eutnfntoeuvlntteoedme.Aipoueprsotecukucinqiaetohnupdstrdcsatfhhn,ladmclsfntowie(elaWie)wttegvndttu_upalucinrtrseu_rtrihhieaaowiete.rthmTevlertreiteerrcdrtrebtelsclttehaueunds0masnerr.rtrenoros&&&&&&&&&&&&TifntodentppteLafntofotesakhsucinosoohuucinrmhtc.laerru_roitlaerr(u_tt*)nu_rolaSaeL;&&&&[1+,v-,0]&&&&&&&&GnrtsaLaerrTeerrmsae(hccnatalbaLaeeaeuro.hroesgwihaculyeuvleoaytp)msbotesaktpTifntodealnaufnyeutenhtco.hsucinosogjm,adteeoenvrrtrs(ela_ro)upnhrfreeeunseuLerr.lagu_citlag(u_tt*,itwa,itdt)nu_claSaeLCnrltegraecletrotoshabgolco.Tifntopromsvrltssacrigttevleotehsucinefrseeaak,codnohaufhprmtrwa:aaeehtLAGSO:sostegraecletrU_CTPtphabgolco.LAGRSATrsattegraecletrU_CETR:etrshabgolco.LAGCLETpromaflgraecletocceU_COLC:efrsulabg-olcinyl.LAGCUTrtrstecretaonommr(nKye)iueU_CON:eunhurnmutfeoyibtsnsbLayu.LAGCUT:rtrstermidrodvdntecretaonU_CONBeunheanefiiighurnmutobtsommriuebLab12.fyefeoynsyuy04LAGSE:promaiceetlseograecleto.TeU_CTPefrsnnrmnatpfabgolcinhse"ieicnrlebdt(agrvlemamrsesitpsz"sotoldyaalreausenoetp)nannseiidwyIyuwntcnrlteseszyumso-pcfea.foatootohtpieouteprmnaltntevleodt.Tefntortrs1itexeietlyuehaufaahucineunfhsefnseagraecletoccetpiihdabg-olcinyl.LAGSTAS:stdtatenwvlefrtepueoteU_CEPUEesaasheauohasfhcletr(e§.)Tefntortrstepeiuvleoteolcose25.hucineunhrvosaufhpueas.LAGSTTPU:stdtatenwvlefrtesemlileU_CESEMLesaasheauohtputpirotecletr(e§.)Tefntortrstepeiuvlefholcose25.hucineunhrvosauotesemlile.fhtputpirLAGIRNIGrtrsaboentatlswehrtecletrU_CSUNN:eunolahtelhteholcoirnig(..ntsopd.sunnie,otpe)LAGGNcagstecletrtgnrtoamd(e§.)U_CE:hneholcooeeainloese25.LAGICcagstecletrticeetlmd.TiiteU_CN:hneholcoonrmnaoehsshdfutmd.ealoeFrmrdtisaotteeotossecletabg.ooeealbuhspin,eolcgraelagtlofu_ealclaAlclagtlof(u_tt*,vi*u)u_lou_ealclaSaeLod*d;&&&&[0+,–-,0][0+,e-,0]&&&&&&&&Rtrstemmr-loainfntooagvnsaeIuinteunheoyalctoucinfiett.fdsoNL,Lasoei*dteoaupitrpsetlanwtt.ULutrsnuhpqeoneasdou_esaelagttu_ecxitlagtt(u_tt*,it*t)nu_ecxlaSaeL&&&&[0+,–-,0]&&&&&&&&&&&&Tifntoiclebacniutofnto(e§.)trtivhsucinsaldyotnainucinse47oereetesauotetraadacnetifrainhttsfhhednotxnomto.Wecleiteoiiafnto,lagttawyrtrsLAOhnaldnhrgnlucinu_ecxlaseunU_KaddentcagtevleoisagmncxWecleisdanosohnehauftruett.hnaldniecniutofnto,lagttrtrsLAYEDadsttevleootnainucinu_ecxeunU_ILneshaufcxtbtecnetifrain(hvlepseatecxagmntoehotxnomtoteauasdshtruetttecletgtewttecniutofnto)ohaleoehrihhotnainucin.Wetecleilapal,Lamyascliscniutohnhalesu_clkualoaltotnainfntothnlerrdrntecl.Tai,uoaerriteucinoaderosuighalhtspnnronhfntocleblapal,Lamyntrtrtteoiiaucinaldyu_clkuaoeunohrgnlfntobtisedmycltecniutofnto.Itacs,aucinuntaaalhotnainucinnhtaecltlagttwlrtrteerrcd(hvletawudbalou_ecxileunhrooeteauhtolertreblapal)tevleocxwlbstttecneteundyu_hauftileeohotxifrainaitecsoayednomto,snhaefil.lagtilu_efedvilagtil(u_tt*,itidxcntca*)odu_efedlaSaeLnne,&&&&[0+,e-,1]&&&&&&&&Pseottesaktevletk,weetitevleategvnuhsnohtchau[]hrshauthieidxAiLatifntomytigramtmtofrte"ne"ne.snu,hsucinargeeaehdohidxeet(e§.)vnse24.lagtlblu_egoavilagtlbl(u_tt*,cntca*odu_egoalaSaeLoshrnm)Pseottesaktevleotegoanm.uhsnohtchaufhlblaelagteaalu_emttbeitlagteaal(u_tt*,nu_emttbelaSaeLnne)&&&&[0+01,–-,(|)][0+,e-,1]&&&&&&&&PseottesaktemttbeotevleategvnidxIuhsnohtcheaalfhauthiene.ftevledenthvamttbetefntortrs0adpsehauosoaeeaal,hucineunnuhsntigotesakohnnhtc.lagtalu_etbevilagtal(u_tt*,odu_etbelaSaeLnne)&&&&[1+,e-,1]&&&&&&&&Pseottesaktevletk,weetitevleategvnuhsnohtchau[]hrshauthieidxadkitevleatetpotesaknenshauthofhtc.Tifntopptekyfotesak(utntersligvleihsucinoshermhtcptigheutnaunispae.AiLatifntomytigramtmtofrtetlc)snu,hsucinargeeaehdoh"ne"eet(e§.)idxvnse24.lagtou_etpitlagto(u_tt*)nu_etplaSaeL;&&&&[0+,–-,0]&&&&&&&&RtrsteidxotetpeeetitesakBcueidcssateunhnefholmnnhtc.easnietra1tirslieulttenmeoeeetitesak(nst,hseutsqaohubrflmnsnhtcado&&&&&&&&&&&&0masaepysak.ennmttc)lagtsrauu_euevlevilagtsrau(u_tt*,odu_euevlelaSaeLnne)&&&&[0+,–-,1]&&&&&&&&PseottesakteLavleascaewtteuedtateuhsnohtchuausoitdihhsraathgvnidxTiLavlemsbatbeonliene.hsuauutealri.laisru_netvilaisr(u_tt*,odu_netlaSaeLnne)&&&&[1+,–-,1]&&&&&&&&Mvstetpeeetittegvnvldidxsitnuteoeholmnnohieaine,hfigpheeetaoetiidxtoesaeTifntocnobclelmnsbvhsneopnpc.hsucinantealdwtaped-ne,bcueaped-neintaatasakihsuoidxeassuoidxsoncultcpsto.oiinlaItgru_neetpdfpriftlaItgryeetdf_u_TetpuebteLaAItrpeetsgeitgavle.hyesdyhuPoersnindnerlausBdfutiiapriftwihiuulytelretsgeyealtstdf_,hcssalhagsinditgatptemciehnls"ofral"nerlyehahnadecmotby.laiboenu_solaitlaiboen(u_tt*,nu_solalaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiaboenad0ohrieeunfhauthienesola,ntews.laicucinu_sfntoitlaicucin(u_tt*,nu_sfntolaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiaCfnto,adeunfhauthienesucinn0ohrietews.laifntou_sucinitlaifnto(u_tt*,nu_sucinlaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiafnto(ihrCoeunfhauthienesucineterLa,ad0ohrieu)ntews.lailgtsraau_sihuedtitlailgtsraa(u_tt*,nu_sihuedtlaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxialgtuedt,adeunfhauthienesihsraan0ohrietews.lainlu_siitlainl(u_tt*,nu_silaSaeLnne)&&&&[0+,–-,0]&&&&&&&&&&&&Rtrs1itevleategvnidxinlad0ohrieeunfhauthienesi,ntews.lainnu_soeitlainn(u_tt*,nu_soelaSaeLnne)Rtrs1itegvnidxintvldad0ohrieeunfhienesoai,ntews.lainnonlu_soeriitlainnonl(u_tt*,nu_soerilaSaeLnne)&&&&[0+,–-,0][0+,–-,0]&&&&&&&&Rtrs1itegvnidxintvldoitevleatiidxeunfhienesoairfhauthsneinlad0ohriesi,ntews.lainmeu_subritlainme(u_tt*,nu_subrlaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxianmeoasrneunfhauthienesubrrtigcnetbetanme,ad0ohrieovriloubrntews.laisrnu_stigitlaisrn(u_tt*,nu_stiglaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiasrnoanme(hceunfhauthienestigrubrwihiawycnetbetasrn)ad0ohrieslasovrilotig,ntews.laitbeu_salitlaitbe(u_tt*,nu_sallaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiatbead0ohrieeunfhauthienesal,ntews.laitrau_sheditlaitra(u_tt*,nu_shedlaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiatra,ad0ohrieeunfhauthieneshedntews.laiuedtu_ssraaitlaiuedt(u_tt*,nu_ssraalaSaeLnne)&&&&[0+,–-,0]&&&&&&&&Rtrs1itevleategvnidxiauedt(ihrfloeunfhauthienessraaeteulrlgt,ad0ohrieih)ntews.lalnu_evilaln(u_tt*,odu_elaSaeLnne)&&&&[0+,e-,1]&&&&&&&&Rtrste"eghotevleategvnidxiieuvlnteunhlnt"tsqiaetote''oeaoiLa(e§..)Terslipseotesakh#prtrnuse346.heutsuhdnhtc.lalau_od&&&&&&&&&&&&itlala(u_tt*,nu_odlaSaeLlaRaerae,u_edredrvi*aaoddt,cntca*oreoshrsuc,cntca*oshrmd)&&&&&&&&[0+,–-,1]&&&&&&&&LasaLacuk(ihurnigi)Iteeaenerr,lalaoduhnwtotunnt.fhrrorosu_odpsetecmiecukaaLafntootpotesakuhshopldhnsuucinnofhtc.Ohrieipseaerrmsaetews,tuhsnroesg.Tertrvleolalaaeheunausfu_odr:LAO:U_KorosLAERYTXU_RSNA:ytxrouigrcmiainLAERE:mmralctoerrU_RMMLAERCMerrwierniga_gmtmto.(hserrhsU_RGM:rohlunn_ceaehdTiroanrltowttecukbiglae.Iignrtdbteoeainihhhnenoddtseeaeyhgraecletr)abgolco.Telalafntoueaue-upidraefntotratehu_oducinsssrspleedrucinoedhcuk(elaRae)Tedtagmniaoauvlepsethnseu_edr.haaruetsnpqeauasdoteraefnto.hedrucinTesucagmngvsanmttecukwihiuefrerrhoreruetieaeohhn,hcssdoromsaeadidbgifrain(e§.)esgsnneunomtose49.lalaatmtclydtcswehrtecukitxobnradu_oduoaialeethtehhnsetriaynlasiacrigy(epormla)Tesrnmdwrsaiodtcodnlsergauc.htigoeoksnfntola,wtteadtotaaNLvleieuvlntteucinodihhdiinhtULausqiaetohsrn"t.tigb"lalauetesakitral,steraefntosolawyu_odsshtcnenlyohedrucinhudlaslaetesakumdfewertrigevhtcnoiidhneunn.Itersligfntohsoeuvletiuvleistttefheutnucinanpau,hspauseohvleotegoaevrnetsoeaidxLARD_LBLiteaufhlblniomntrdtneU_IXGOASnhrgsr(e§.)Welaigmicuk,tiuvlewlbteeityse45.hnodnanhnshspauileh_Nvral(e§.)EVaibese22.lanwttu_esaelaSae*u_esae(u_lofvi*d;u_ttlanwttlaAlc,odu)&&&&[0+,–-,0]&&&&&&&&CetsanwtrarnigianwidpnetsaeRtrsNLiraeehedunnne,needntt.eunULfcnocettetraotesae(utlcommr)Teantraehhedrhttdeoakfeoy.Ladealmmralctofrruetshloaoucinuosleoyloainotisaetruhtifnto.Tescnagmn,u,iaoauhstthoghsucinheodruetdsnpqepitrtaLapsettealctrieeycl.onehtuassohloaonvrallanwalu_etbevilanwal(u_tt*)odu_etbelaSaeL;&&&&[0+,e-,1]&&&&&&&&CetsanwepytbeadpseiottesakIieuvlnraeemtalnuhstnohtc.tsqiaettlacettbeL00.ou_raeal(,,)lanwhedu_etra&&&&&&&&&&&&laSae*u_etra(u_tt*)u_ttlanwhedlaSaeL;&&&&&&&&[0+,e-,1]&&&&&&&&Cetsanwtra,pseiotesakadrtrsapitrtaraeeheduhstnhtc,neunoneolaSaetarpeettinwtra.Tenwtrartrebu_tthtersnshsehedhehedeundytifntosaewtteoiiatraisgoaevrnetbthsucinhrsihhrgnlhedtlblniomn,uhsaidpneteeuinsakanneednxctotc.Teeinepiifntotcoeotdsryatra.Trashrsoxlctucinolsroetohedhedaesbettgraecleto,lkayLaojc.rujcoabgolcinienubetlanwsraau_euedtvi*u_euedt(u_tt*,sz_sz)odlanwsraalaSaeL&&&&[0+,e-,1]&&&&&&&&Tifntoalctsanwbokommrwttegvnsz,psehsucinloaeelcfeoyihh

我要回帖

更多关于 mikiumkee 的文章

 

随机推荐