{CENTER[[META]]|[[META 2]]|[[META 3]]|META}_IMG https://upload.wikimedia.org/wikipedia/commons/3/3d/Maquina.png_H1是否METALK是图灵机?_p它是[[META 3]]的简短版本,其中提供了一些更详细的说明。_h2 1)语法{pre exp:=word:[^\s()]*|抽象:(Fun(Word)exp)|定义:(Def Word Exp)//可选|应用程序:(Exp Exp)}_p没有其他,没有原语,字典为空,没有布尔值,没有数字,没有数据结构,没有控制结构。没有。抽象基本上只做简单的文本替换,通过立即调用的函数表达式(Live){code((Fun(Args)body)value)},例如:{pre((Fun(:A:B).:B:A.)。你好世界)//生活,在哪里->;((Fun(:B).:B Hello.)。World)//hello替换:A->;((Fun().。WORLD HELLO.))//WORLD RECOVERS:B->;.。world hello.//返回正文}_p请注意,上面的四行是{i等价},就像这个代数表达式{code(a-b)*(a+b)}等价于{code a{sup 2}-b{sup 2}}。接下来的一切都是或多或少复杂的词、抽象、定义和应用的组合问题。_H2 2)word{pre((Fun(:A:B):B:A)hello world)->;{eval((Fun(:A:B):B:A)hello world)}(def exchange(Fun(:A:B):B:A))//匿名函数的名称->;{eval(def SWAP(FUN(:A:B):B:A))}(SWAP Hello World)//对两个值应用函数->;{eval(Swap Hello World)}(Def HI Hello World)->;{eval(Def HI Hello World)}HI//不计算单词->;HI(HI)//强制求值->;{eval(HI)}(def true(Fun(:A:B):A))-&。{eval(def true(Fun(:A:B):A))}(def false(Fun(:A:B):B))->;{eval(def false(Fun(:A:B):B))}(def if(Fun(:C:A:B)(:C:A:B)->;{eval(def if(Fun(:C:A:B)(:c:A:B))}(If True Yes No)//[[meta3]]->;{eval(If True Yes No)}(If False Yes No)->;{eval(If False Yes No)}(def cons(Fun(:A:B:C)(:c:A:B)//等待3个值->;{eval(def cons(Fun(:A:B:C)(:C:A:B))}(def head(Fun(:p)(:p true)//等待函数->;{eval(def head(Fun(:p)(:p true)}(def Tail(Fun(:p)(:p false)->;{eval(def Tail(Fun(:p)(:p false)}(def P(Cons Hello World))//此部分应用程序->;{eval(def P(Cons Hello World))}//return(Fun(:C)(:c hello world))(head(P))->;{eval(head(P))}(ail(P))->;{eval(Tail(P))}(def nil(Fun(:A)true))//始终返回TRUE->;{eval(def nil(Fun(:A)true))}(def NILP(FUN(:P)(:P(FUN(:A:B)False)->;{eval(def NILP(FUN(:P)(:P)(:P(FUN(:A:B)False)}(NILP nil。{eval(NILP Nil)}(NILP(P))->;{eval(NILP(P))}我们拥有构建递归进程所需的一切:(def DISP(FUN(:l)((if(NILP:l)//参见[[meta3]]了解解释(FUN(:l)(FUN(:l)(Head:l)(DISP(Tail:l):l))->;{eval(def DISP(Fun(:l)((if(NILP:l)(Fun(:l))(Fun(:l)(Fun(:l)(DISP(Tail:l):l))}(def L(cons hello(cons braid(cons new(Cons World Nil)-->;{eval(def L(cons hello(cons hello(cons we(Cons World Nil)}。{eval(DISP(L))}使用此模式,让';%s构建反转、追加、长度.(def Reverse(def REVERSE.R(FUN(:A:B))((IF(NILP:A)(FUN(:A:B):B)(FUN(:A:B)(REVERSE.R(Tail:A)(CONS(HEAD:A):B):A:B))(FUN(:A)(REVERSE.R:A nil)->;{eval(def Reverse(def REVERSE.R(FUN(:A:B))((IF(NILP:A)(FUN(:A:B):B))(FUN(:A:B)(REVERSE.R(Tail:A)(CONS(HEAD:A):B):A:B))(FUN(:A)(REVERSE.R:A NIL))}(DISP(Reverse(L)->。{eval(DISP(Reverse(L)}(def append(def APPEND.r(FUN(:A:B)((if(NILP:B)(FUN(:A:B):A)(FUN(:A:B)(APPEND.r(CONS(Head:B):A)(Tail:B):A:B))(Fun(:A:B)(APPEND.r(Reverse:A):B))-。{eval(def append(def APPEND.r(FUN(:A:B))((IF(NILP:B)(FUN(:A:B):A)(FUN(:A:B)(APPEND.r(CONS(Head:B):A)(Tail:B):A:B))(Fun(:A:B)(APPEND.r(Reverse:A):B))}(DISP(Append(L))(反转(L)->;{eval(DISP(Append(L)(Reverse(L)}(def length(FUN(:l)((IF(NILP:l)(FUN(:l)(FUN(:l))。(Length(Tail:l):l)->;{eval(def length(FUN(:l))((IF(NILP:l)(FUN(:l)(FUN(:l))。(Length(Tail:l):l))}(Length(L))->;{eval(Length(L))}//它是数字4}_H2 3)Numbers_p的基本符号。{b Length}函数将列表长度显示为点序列,让';将数字定义为以{b nil}开始的点列表,即{b零}。{pre(def Succ(Fun(:N)(cons.。:n)->;{eval(def Succ(Fun(:n)(cons.。:n)}(def prev(FUN(:n)(Tail:n)->;{eval(def prev(Fun(:n)(Tail:n)}(def one(Succ(Nil)->;{eval(def one(ucc(Nil)}{eval(DISP(One))}(def Two(ucc(One)-&