当前位置: 首页 > 科技观察

助你掌握Emacs:从JavaScript学elisp

时间:2023-03-17 15:18:57 科技观察

对于我们JS用户来说,学习EmacsLisp可能看起来很困难,但这一切都是昨天。因为elisp老了,但是library却与时俱进。当我们从适合elisp的dash.el开始时,elisp将在一秒钟内编写。闲话少说,开门见山。dash.el是一个为elisp用户处理数组的工具。它与JS数组的一一对应总结如下:1)数组转换(迭代)2)数组转换(非迭代)3)逻辑判断4)操作数据结构5)排序五个方面。1.迭代法Transform(纯函数无副作用)函数式编程最重要的一点就是你不需要关注迭代的脏细节。这里把函数迭代的方法分类为JS的数组方法和elisp的bash。el库一一对应:;;1.reuduce(-reduce-from(lambda(accval)(+accval))0'(47810));;=>29;;2.map(-map(lambda(val)(*val2))'(47810));;=>(8141620);;3.flat(-flatten-n2'((12)((34)((56)))));;=>(1234(56));;4.flatMapwithnocouterpart;;5.repeatasfillELISP>(-repeat100)(0000000000);;6.eachwithsideeffects(-each'("x""y""z")(lambda(val)(princval)));;=>"xyz"二、非迭代法数组变换无副作用以上6种都是函数式迭代纯函数对数组进行变换,这里是非迭代法的纯函数单独提取class:;;1.concat(-concat'("x""y""z")'(356));;=>("x""y""z"356);;2.formatforjoin(格式"%s"'("x""y""z"));;=>"(xyz)";;3.slice(-slice'("x""y""z""w")13);;=>("y""z")3.数组的逻辑判断logic-predicat在es(non-side-effect)函数范式的六个方法之后,我们继续考察用于逻辑判断的高阶函数:;;1.-filterasjsfilter(-filter(lambda(v)(and(>v30)((7698);;2.findorfirstasjsfind(-find(lambda(v)(and(>v30)(76;;3.-find-indexasjsfindIndex(-find-index(lambda(v)(and(>v30)(1;;4.包含-pasjsincludes(-contains-p'(23769810)76);;t;;5.-elem-indexasindexOf(-elem-index76'(23769810));;=>1;;6.some(-some(lambda(v)(and(>v30)(t;;7.every(-every(lambda(v)(and(>v30)(false4.数据结构操作数组可以作为两种抽象结构数据的载体,分别是栈和队列1)push2)pop3)shift4)unshift5)splice(splice是一种特殊的方法,因为改变了原数组,放在这里);;1.appendelementtotheendofarray(array.push)(append'(237610189)67);;=>(237610189.67);;2.nbutlasttoremovelaselement(array.pop)(nbutlast'(23??7610189));;=>(2376101);;3.removefirstelement(array.shift)ELISP>(let((l'(237689)))(popl)l)(7689);;4.addelementtothefront(array.unshift)ELISP>(let((l'(237689))(push12l)l)(12237689);5.inserttolistatpositionn(array.splice)(-insert-at1'x'(abc));;=>(axbc);;letarr=[a,b,c];arr。splice(1,0,x);arr;;6.replaceatpotion(array.splice)(-replace-at09'(012345));;=>(912345);;letarr=[1,2,3,4,5];arr.splice(0,1,9);arr5.数组排序以普适排序结束,不管是排序还是逆序,都是直接在原数组上修改,即inplace操作。(-sort'<'(312));;=>(123)(-sort'>'(312));;=>(321);;正好是六个。总结通过上面的总结,我们发现即使不是看完文档,你也可以马上开始写elisp了。