Tamgu(탐구)是一个函数式、命令式与逻辑一体化(FIL,Fuctioal、Imperative、Logical)的编程语言,主要用于注解和数据扩充。
Tamgu是一种多线程编程语言,特征包括:
接近Pytho的命令式风格,但具有强大的类型系统。受Haskell启发的函数式风格,可自由地与命令式范式相结合。由Prolog启发的逻辑风格,可以自由地与命令式和函数式范式相结合。使用Tamgu,可以对于编程中的每个特定问题,选择最合适的形式,并自由地混合函数式、命令式和逻辑方法,以实现最具表现力但最紧凑的代码。
此外,Tamgu还提供了一个注解语言实现,它提供了一个结合了词汇和规则的综合规则机制,允许以有效的方式检测文本中的复杂模式。它提供了许多功能,同时也提供了许多库,有助于设计和实现复杂文档的注解方案。
CodeExample
//Aimperativelaguageiti=10;strigs="20";------------------------------------------------------------------------------------//Cotaiersmapm={'a':1,'b':2};//allsortsofcotaierstreemapt={"u":10,'v':'toto'};vectorv=[1,2,3,"a","b"];ivectoriv=[1..10];//iv=[1,2,3,4,5,6,7,8,9,10]iv=[1,3..10];//iv=[1,3,5,9]------------------------------------------------------------------------------------//Fuctios,threadsadframesfuctiomycall(iti,strigs){...}//fuctiosthreadmythread(iti,strigs){...}//threadsframemyclass{...}//classdefiitio------------------------------------------------------------------------------------//NativeKoreastrigsupports="에버랜드알쏭달쏭Quiz";if(s[0].ishagul())pritl("Ok");uvectordec=s.jamo();//['ᄋ','ᅦ','ᄇ','ᅥ','ᄅ','ᅢ','ᆫ','ᄃ','ᅳ'...]dec=s.romaizatio();//['-/g','e','b','eo','r/l','ae','','d',...]------------------------------------------------------------------------------------//FuctioalapproachbasedoHaskellivectoriv=[1..20];//alistofitegersbetwee1ad20iv.shuffle();//Theorderoftheelemetsisowradom.<fastsort([])=[]>;//ifthelistisempty,wereturaempty"list"<fastsort([fv:v])=milist&&&fv&&&maxlistwhere//wemergethedifferetlist...letmilist=fastsort(<filter(<=fv)v>),//wesortthelistwithelemetssmallerthafvletmaxlist=fastsort(<filter(>fv)v>)>;//wesortthelistwithelemetslargerthafv//wecacallafuctioaldefiitioasregularcodev=fastsort(iv);------------------------------------------------------------------------------------//Predicatescocat([],?X,?X).cocat([?H|?T],?Y,[?H|?Z]):-cocat(?T,?Y,?Z).//Youcamixfreelyyourpredicatedefiitiowithsomeregulartamgucodev=cocat(["eglish",'russia',"frech"],['spaish'],?L);pritl(v);//["eglish",'russia',"frech","spaish"]注解示例
//Wedefiesomelexicalrules(startigwitha"@")@food<-burger.@food<-tartare.//Ourrule:if"thefood"wordisfoudiasetece,theweretura"meal"labelmeal<-"the",#food.//Weeedaspecificobjecttoscaaseteceaotatorr;//asetecestrigsetece="Here,theburgeradthetartarearedelicious."vectorv=r.parse(setece);//Result:v=[['meal',[10,16]],['meal',[25,32]]]//Itreads:two'meal'werefoudatpositio10-16adpositio25-32...
评论