Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- l="("
- def S(s):
- if s[0]!=l:return s
- if s[1]=="\":g=s.find('.');return"(\ %s. %s)"%(s[3:g],S(s[g+2:-1]))
- i=2;c=s[1]==l
- while c:c+=(s[i]==l)-(s[i]==')');i+=1
- t=S(s[1:i])
- z=s[i+1:-1]
- if l!=t[0]:return"(%s %s)"%(t,S(z))
- g=t.find('.')
- t=S(t[g+2:-1]).replace(t[3:g],z)
- if t!=s:t=S(t)
- return t
- print S(raw_input())
- atom(x){
- return m[x]>>5==3;
- }
- #include<stdio.h>
- #include<string.h>
- #define X m[x]
- #define R return
- char*n,*m;int u,w,d;C(x,y){w=n-m;n+=sprintf(n,y?"(%s %s)":"(%s)",&X,m+y)+1;R w;}T(x){R X>>5==3;}
- L(x){R X==92;}O(x,j){w=n-m;memcpy(n,&X,j);n+=j;*n++=0;R w;}E(x){X==' '?++x:0;R
- X==41?0:L(x)?O(x,4):P(x);}P(x){d=0,w=x;do{X==40?d++:X==41?d--:0;++x;}while(d>0);R
- O(w,x-w);}D(x){u=E(x+1);R u?E(x+1+strlen(m+u)):0;}V(x){int a=E(x+1),b=D(x);R
- T(x)|T(a)?x:L(a)?C(a,V(b)):L(E(a+1))?V(S(V(b),E(a+3),D(a))):V(C(V(a),b?V(b):0));}S(w,y,x){R
- T(x)?(X==m[y]?w:x):C(L(w+1)?E(x+1):S(w,y,E(x+1)),D(x)?S(w,y,D(x)):0);}
- Y(char*s){n+=strlen(s=strcpy(n,s))+1;printf("%sn%snn",s,m+V(s-m));n=m+1;}
- char*s[]={
- "((\ a. a) (b))",
- "((\ x. x) (\ y. (\ z. z)))",
- "(\ x. ((\ y. y) x))",
- "(((\ x. (\ y. x)) (\ a. a)) (\ b. b))",
- "((\ x. (\ y. y)) (\ a. a))",
- "(((\ x. (\ y. y)) (\ a. a)) (\ b. b))",
- "((\x. (x x)) (\x. (x x)))",0};
- #include<unistd.h>
- main(){char**k;n=m=sbrk(4096);*n++=0;for(k=s;*k;k++)Y(*k);R 0;}
- #include<stdio.h>
- #include<string.h>
- #define K(j) strncpy(n,m+x,j);n+=j;goto N;
- #define R return
- #define X m[x]
- #define L =='\'
- char*m,*n;T(x){R islower(X);}V(x){int a=E(x+1);R
- T(x)?x:T(a)?x:m[a]L?C(a,V(D(x))):m[E(a+1)]L?V(S(V(D(x)),E(a+3),D(a))):V(C(V(a),D(x)?V(D(x)):0));}
- C(x,y){char*t=n;sprintf(n,y?"(%s %s)":"(%s)",m+x,m+y);n+=strlen(n)+1;R
- t-m;}Y(char*s){char*t=strcpy(n,s);n+=strlen(n)+1;printf("%s=>%sn",s,m+V(t-m));n=m+1;}S(x,y,z){R
- T(z)?(m[z]==m[y]?x:z):C(m[z+1]L?E(z+1):S(x,y,E(z+1)),D(z)?S(x,y,D(z)):0);}D(x){R
- E(x+1)?E(x+strlen(m+E(x+1))+1):0;}E(x){char*t=n,d=0;if(X==' ')++x;if(T(x)){K(1)}if(X
- L){K(4)}do{d=X?(X=='('?d+1:(X==')'?d-1:d)):0;*n++=m[x++];}while(d);N:*n++=0;R t-m;}
- char*samp[]={
- "a","a","b","b",
- "((\ a. a) (b))", "(b)",
- "((\ x. x) (\ y. (\ z. z)))", "(\ y. (\ z. z))",
- "(\ x. ((\ y. y) x))", "(\ x. x)",
- "(((\ x. (\ y. x)) (\ a. a)) (\ b. b))", "(\ a. a)",
- "((\ x. (\ y. y)) (\ a. a))", "(\ y. y)",
- "(((\ x. (\ y. y)) (\ a. a)) (\ b. b))", "(\ b. b)",
- "((\x. (x x)) (\x. (x x)))", "undef",
- NULL};
- #include<unistd.h>
- unsigned sz;
- #include<signal.h>
- void fix(x){signal(SIGSEGV,fix);brk(m+(sz*=2));}
- main(){
- char**t;
- signal(SIGSEGV,fix);
- m=n=sbrk(sz=10*getpagesize());
- *n++=0;
- for(t=samp;*t;t+=2){
- Y(*t);
- printf("s.b. => %snn", t[1]);
- }
- return 0;
- }
- #include<stdio.h>
- #include<string.h>
- char*m,*n; //memory_base, memory_next
- atom(x){ // x is an atom if it is a cursor to a lowercase alpha char.
- return x?(islower(m[x])?m[x]:0):0;
- }
- eq(x,y){ // x and y are equal if they are both atoms, the same atom.
- return x&&y&&atom(x)==atom(y);
- }
- cell(x){ // return a copy of the list-string by cursor, by parsing
- char*t=n,d=0;
- if(!x||!m[x])
- return 0;
- if(m[x]==' ')
- ++x;
- if(atom(x)){
- *n++=m[x];
- *n++=0;
- return(n-m)-2;
- }
- if(m[x]=='\'){ // our lambda symbol
- memcpy(n,m+x,4);
- n+=4;
- *n++=0;
- return(n-m)-5;
- }
- do{ // um ...
- d=m[x]?(m[x]=='('?d+1:(m[x]==')'?d-1:d)):0;
- *n++=m[x++];
- }while(d);
- *n++=0;
- return t-m;
- }
- car(x){ // return (copy of) first element
- return x?cell(x+1):0;
- }
- cdr(x){ // return (copy of) rest of list
- return car(x)?cell(x+strlen(m+car(x))+1):0;
- }
- cons(x,y){ // return new list containing first x and rest y
- char*t=n;
- return x?(sprintf(n,y?"(%s %s)":"(%s)",m+x,m+y),n+=strlen(n)+1,t-m):0;
- }
- subst(x,y,z){ // substitute x for z in y
- if(!x||!y||!z)
- return 0;
- return atom(z)? (eq(z,y)?x:z):
- cons(m[z+1]=='\'?car(z):
- subst(x,y,car(z)),cdr(z)?subst(x,y,cdr(z)):0);
- }
- eval(x){ // evaluate a lambda expression
- int a;
- return atom(x)?x:
- atom(a=car(x))?x:
- m[a]=='\'?cons(a,eval(cdr(x))):
- m[car(a)]=='\'?eval(subst(eval(cdr(x)),cell(a+3),cdr(a))):
- eval( cons(eval(a),cdr(x)?eval(cdr(x)):0));
- }
- try(char*s){ // handler
- char*t=strcpy(n,s);
- n+=strlen(n)+1;
- printf("input: %sn", s);
- printf("eval => %sn", m+eval(t-m));
- n=m+1;
- }
- 00000000 18 18 18 18 18 18 44 45 1a 10 18 18 45 7f fb cf |......DE....E...|
- 00000010 f0 b9 fe 00 78 7f 0b 6f cf f8 7f c0 0b 9f de 7e |....x..o.......~|
- 00000020 f2 cf e1 b0 bf e1 ff 0e 6f 79 ff d3 40 f3 a4 46 |........oy..@..F|
- 00000030 87 34 0a a8 d0 80 2b 0b ff 78 16 ff fe 16 fc 2d |.4....+..x.....-|
- 00000040 ff ff fc ab ff 06 55 1a 00 58 57 ef 81 15 bf bf |......U..XW.....|
- 00000050 0b 6f 02 fd 60 7e 16 f7 3d 11 7f 3f 00 df fb c0 |.o..`~..=..?....|
- 00000060 bf f9 7e f8 85 5f e0 60 df 70 b7 ff ff e5 5f f0 |..~.._.`.p...._.|
- 00000070 30 30 6f dd 80 5b b3 41 be 85 bf ff ca a3 42 0a |00o..[.A......B.|
- 00000080 c2 bc c0 37 83 00 c0 3c 2b ff 9f f5 10 22 bc 03 |...7...<+...."..|
- 00000090 3d f0 71 95 f6 57 d0 60 18 05 df ef c0 30 0b bf |=.q..W.`.....0..|
- 000000a0 7f 01 9a c1 70 2e 80 5b ff e7 c2 df fe e1 15 55 |....p..[.......U|
- 000000b0 75 55 41 82 0a 20 28 29 5c 61 |uUA.. ()a|
- 000000ba
- cc -O2 -DM=0x100000 -m32 -std=c99 uni.c -o uni
- echo -n "010000011100111001110100000011100111010" > threetwo.blc
- cat symbolic.Blc threetwo.blc | ./uni
- (a b a (a (a b))) (a b a (a b))
- a (b c b (b c)) ((b c b (b c)) ((b c b (b c)) a))
- a b (c d c (c d)) ((c d c (c d)) a) ((c d c (c d)) ((c d c (c d)) a) b)
- a b (c (d e d (d e)) a ((d e d (d e)) a c)) ((c d c (c d)) ((c d c (c d)) a) b)
- a b (c d c (c d)) a ((c d c (c d)) a ((c d c (c d)) ((c d c (c d)) a) b))
- a b (c a (a c)) ((c d c (c d)) a ((c d c (c d)) ((c d c (c d)) a) b))
- a b a (a ((c d c (c d)) a ((c d c (c d)) ((c d c (c d)) a) b)))
- a b a (a ((c a (a c)) ((c d c (c d)) ((c d c (c d)) a) b)))
- a b a (a (a (a ((c d c (c d)) ((c d c (c d)) a) b))))
- a b a (a (a (a ((c (d e d (d e)) a ((d e d (d e)) a c)) b))))
- a b a (a (a (a ((c d c (c d)) a ((c d c (c d)) a b)))))
- a b a (a (a (a ((c a (a c)) ((c d c (c d)) a b)))))
- a b a (a (a (a (a (a ((c d c (c d)) a b))))))
- a b a (a (a (a (a (a ((c a (a c)) b))))))
- a b a (a (a (a (a (a (a (a b)))))))
- @10\@10\@10\@10\@10\@10@@@@@@1010@\@10\@10@@@@1111111111101
- 1110@11111110@@110@11111110\\@1110@1111110@@101101111110@111111110@111
- 111110\\@@110@111111011110@11111011110@@10@1111110@10110@@111111110@111
- 111110@110@101111011110@1111111111010@1010\@1110@11010@@@1010@110@1010
- @@@@@@1010@\\@@@10@@111111111011110\@@101111111111111110@@101111110
- @@10111111111111111111111110@@@@1111111110\110@@@@@1010\\@@10@@@1111101
- 11110\@@@@10111111101111110@@1011011110\@@11111010110\@111110@@1011110
- 1110@111010101011111110@111110\@101111111111011110\@@11111111110@@11111
- 011111010@@@@11111110\@10\1101111101110@@1011111111111111111111110@@@@1
- 11111110\@10\@10\11011111101110110\@@101110110@1010\11011111010@@1011
- 111111111111110@@@@@1010@\@@@10@@@1110@10\@1011110\110\@10\@1110
- @@@11111111110@111111110101010\@@@@1110\@10@1110111110\1110110@@@1111
- 0110@@@1111010\110\@10\@@1101111111101111110\@10\@@1101111110111111
- 10\110@1010110\101110\@@11010\@@1011111111111110@11110@@1011111111111
- 101110@@@@@@@@@11010101010101010\110\10\101010\1010\1010@@@110110
- @
- f=->u,r{r.chars.take_while{|c|u+=c==?(?1:c==?)?-1:0;u>0}*''}
- l=->x{x=~/^((*)(\ (w+). (.*)/&&(b,v,r=$1,$2,$3;e=f[1,r];(e==s=l[e])?b==''?x:(s=f[2,r];(x==y=b.chop+e.gsub(v,s[2+e.size..-1])+r[1+s.size..-1])?x:l[y]):(b+'(\ '+v+'. '+s+r[e.size..-1]))||x}
- puts l["((\ x. (\ y. x)) (\ a. a))"] # <= ( y. ( a. a))
- L=(.0==\)
- A=->it.forEach?&&it.0!=\
- V=(.toFixed?)
- S=(a,b,t=-1,l=0)->|L a=>[\,S(a.1,b,t,l+1)];|A a=>(map (->S(a[it],b,t,l)),[0 1]);|a==l+-1=>S(b,0,l+-1,0)||a|l-1<a=>a+t;|_=>a
- R=(a)->|L a=>[\,R a.1]|(A a)&&(L a.0)=>R(S(R(a.0),R(a.1)).1)|_=>a
- a = [\,[\,[1 [1 0]]]]
- b = [\,[\,[1 [1 [1 0]]]]]
- console.log R [a, b]
- # outputs ["\",["\",[1,[1,[1,[1,[1,[1,[1,[1,[1,0]]]]]]]]]]]
- # Just type checking
- λ = 100
- isλ = (.0==λ)
- isA = -> it.forEach? && it.0!=λ
- isV = (.toFixed?)
- # Performs substitutions in trees
- # a: trees to perform substitution in
- # b: substitute bound variables by this, if != void
- # f: add this value to all unbound variables
- # l: internal (depth)
- S = (a,b,t=-1,l=0) ->
- switch
- | isλ a => [λ, (S a.1, b, t, l+1)]
- | isA a => [(S a.0, b, t, l), (S a.1, b, t, l)]
- | a == l - 1 => (S b, 0, (l - 1), 0) || a
- | l - 1 < a < 100 => a + t
- | _ => a
- # Performs the beta-reduction
- R = (a) ->
- switch
- | (isλ a) => [λ,R a.1]
- | (isA a) && (isλ a.0) => R(S(R(a.0),R(a.1)).1)
- | _ => a
- # Test
- a = [λ,[λ,[1 [1 0]]]]
- b = [λ,[λ,[1 [1 [1 0]]]]]
- console.log show R [a, b]
- (=
- f[is cons?&car._'λ]n[if
- atom._ _
- f._ `(λ,_.1,n:_.2)(=
- c n:_.0
- e _)(if
- f.c(n:deep-map[if(is
- c.1 _)e.1
- _]c.2)(map n
- _))]λ[n:read:rem #._])
- data T=A[Char]|B[Char]T|C T T
- (!)=(++)
- s(A a)=a
- s(B a b)="(λ "!a!". "!s b!")"
- s(C a b)='(':s a!" "!s b!")"
- e d(A a)=maybe(A a)id(lookup a d)
- e d(B a b)=B a.e d$b
- e d(C a b)=f d(e d a)(e d b)
- f d(B x s)q=e((x,q):d)s
- f d p q=C p q
- d=tail
- p('(':'λ':s)=let(A c,t)=p(d s);(b,u)=p(d.d$t);in(B c b,d u)
- p('(':s)=let(a,t)=p s;(b,u)=p(d t)in(C a b,d u)
- p(c:s)|elem c" .)"=(A "",c:s)|1<2=let((A w),t)=p s in(A(c:w),t)
- r=s.e[].fst.p
- main=do l<-getLine;putStrLn$r l
- data Expression = Literal String
- | Lambda String Expression
- | Apply Expression Expression
- deriving Show
- type Context = [(String, Expression)]
- show' :: Expression -> String
- show' (Literal a) = a
- show' (Lambda x e) = "(λ " ++ x ++ ". " ++ show' e ++ ")"
- show' (Apply e1 e2) = "(" ++ show' e1 ++ " " ++ show' e2 ++ ")"
- eval :: Context -> Expression -> Expression
- eval context e@(Literal a) = maybe e id (lookup a context)
- eval context (Lambda x e) = Lambda x (eval context e)
- eval context (Apply e1 e2) = apply context (eval context e1) (eval context e2)
- apply :: Context -> Expression -> Expression -> Expression
- apply context (Lambda x e) e2 = eval ((x, e2):context) e
- apply context e1 e2 = Apply e1 e2
- parse :: String -> (Expression, String)
- parse ('(':'λ':s) = let
- (Literal a, s') = parse (tail s)
- (e, s'') = parse (drop 2 s')
- in (Lambda a e, tail s'')
- parse ('(':s) = let
- (e1, s') = parse s
- (e2, s'') = parse (tail s')
- in (Apply e1 e2, tail s'')
- parse (c:s) | elem c " .)" = (Literal "", c:s)
- | otherwise = let ((Literal a), s') = parse s
- in (Literal (c:a), s')
- run :: String -> String
- run = show' . eval [] . fst . parse
- main = do
- line <- getLine
- putStrLn$ run line
- #define F for
- #define R return
- #define E if(i>=M||j>=M)R-1;
- enum{O='(',C,M=3999};signed char Q[M],D[M],t[M],Z,v,*o=Q,*d=D,*T;int m,n,s,c,w,x,y;K(i,j,k){!Z&&(Z=t[O]=1)+(t[C]=-1);E;if(!o[i]){d[j]=0;R 0;}if((c=t[o[i]]+t[o[i+1]])!=2||o[i+2]!='\'){d[j++]=o[i++];R K(i,j,i);}F(i+=2,y=w=0;i<M&&o[i]&&c;++i)c+=t[o[i]],!w&&c==1?w=i:0,!y&&o[i]=='.'?y=i+2:0;E;if(c){F(;d[j++]=o[i++];)E;R 0;}F(c=y;c<w;++c)if(o[c]=='\')F(n=0,m=w+2;m<i;++m){if(o[m]==o[c+2]){F(x=0;o[m+x]&&isalpha(o[m+x])&&o[m+x]==o[c+2+x];++x);if(o[c+2+x]!='.'||isalpha(o[m+x]))continue;if(v>'Z')R-1;F(n=c+2;n<w;++n)if(o[n]==o[m]){F(x=0; o[m+x]&&isalpha(o[m+x])&&o[m+x]==o[n+x];++x);if(o[m+x]=='.'&&!isalpha(o[n+x]))F(;--x>=0;) o[n+x]=v;}++v;}}F(c=y;c<w&&j<M;++c){F(x=0;o[c+x]&&o[c+x]==o[k+4+x]&&isalpha(o[c+x]); ++x);if(o[k+4+x]=='.'&&!isalpha(o[c+x])){F(m=w+2;m<i-1&&j<M;++m)d[j++]=o[m];c+=x-1;}else d[j++]=o[c];}E;Z=2;R K(i,j,i);}char*L(char*a){F(s=n=0;n<M&&(o[n]=a[n]);++n);if(n==M)R 0;v='A';F(;++s<M;){Z=0;n=K(0,0,0);if(Z==2&&n!=-1)T=d,d=o,o=T;else break;}R n==-1||s>=M?0:d;}
- #define P printf
- main()
- {char *r[]={ "((\ abc. (\ b. (abc (abc (abc b))))) (\ cc. (\ dd. (cc (cc dd)))))",
- "((\ fa. (\ abc. (fa abc))) (\ yy. (\ abc. yy)))",
- "((\ x. x) z)",
- "((\ x. x) (\ y. (\ z. z)))",
- "(\ x. ((\ y. y) x))",
- "((\ x. (\ y. x)) (\ a. a))",
- "(((\ x. (\ y. x)) (\ a. a)) (\ b. b))",
- "((\ x. (\ y. y)) (\ a. a))",
- "(((\ x. (\ y. y)) (\ a. a)) (\ b. b))",
- "((\ x. (x x)) (\ x. (x x)))",
- "(((\ x. (\ y. x)) (\ a. a)) ((\ x. (x x)) (\ x. (x x))))",
- 0}, *p;
- int w;
- for(w=0; r[w] ;++w)
- {p=L(r[w]);
- P("o=%s d=%sn", r[w], p==0?"Error ":p);
- }
- R 0;
- }
- /*1.039*/
- (function f(a){return a[0]?(a=a.map(f),1===a[0][0]?f(function d(b,a,e,c){return b[0]?1===b[0]?[1,d(b[1],a,e,c+1)]:2===b[0]?b[1]===c-1?d(a,0,c-1,0)||b:c-1<b[1]?[2,b[1]+e]:b:[d(b[0],a,e,c),d(b[1],a,e,c)]:b}(a[0],a[1],-1,0)[1]):a):a})
- zero = [1,[1,[2,0]]]; // λλ0
- succ = [1,[1,[1,[[2,1],[[[2,2],[2,1]],[2,0]]]]]]; // λλλ(1 ((2 1) 0))
- console.log(JSON.stringify(reduce([succ,[succ,[succ,zero]]]))); // 0+1+1+1
- // Output: [1,[1,[[2,1],[[2,1],[[2,1],[2,0]]]]]] = λλ(1(1(1 0))) = number 3
- #define R return
- #define E if(i>=M||j>=M)R-1;
- #define H d[j++]
- enum{O=40,C,M=3999};signed char Q[M],D[M],t[M],Z,*o=Q,*d=D,*T;int m,n,s,c,w;K(i,j,k){!Z&&(Z=t[O]=1)+(t[C]=-1);E;if(!o[i]){H=0;R 0;}if((c=t[o[i]]+t[o[i+1]])!=2||o[i+2]!=92){H=o[i++];R K(i,j,i);}for(i+=2,w=0;i<M&&o[i]&&c;++i)c+=t[o[i]],!w&&c==1?w=i:0;E;if(c){for(;H=o[i++];)E;R 0;}for(c=k+7,n=j;c<w&&j<M;++c)if(o[c]==o[k+4]){if(o[c+1]==46){d[n++]=o[k++];R K(k,n,k);}for(m=w+2;m<i-1&&j<M;)H=o[m++];}else H=o[c];E;Z=2;R K(i,j,i);}char*L(char*a){for(s=n=0;n<M&&(o[n]=a[n]);++n);if(n==M)R 0;for(;++s<M;){Z=0;if((n=K(0,0,0))!=-1&&Z==2)T=d,d=o,o=T;else break;}R n==-1||s>=M?0:d;}
- #define P printf
- main()
- {char *r[]={ "((\ x. x) z)",
- "((\ x. x) (\ y. (\ z. z)))",
- "(\ x. ((\ y. y) x))",
- "((\ x. (\ y. x)) (\ a. a))",
- "(((\ x. (\ y. x)) (\ a. a)) (\ b. b))",
- "((\ x. (\ y. y)) (\ a. a))",
- "(((\ x. (\ y. y)) (\ a. a)) (\ b. b))",
- "((\ x. (x x)) (\ x. (x x)))",
- "(((\ x. (\ y. x)) (\ a. a)) ((\ x. (x x)) (\ x. (x x))))",
- "((\ a. (\ b. (a (a (a b))))) (\ c. (\ d. (c (c d)))))",
- "((\ f. (\ x. (f x))) (\ y. (\ x. y)))",
- 0}, *y;
- int w;
- for(w=0; r[w] ;++w)
- {y=L(r[w]);
- P("o=%s d=%sn", r[w], y==0?"Error ":y);
- }
- R 0;
- }
- /*
- 637
- o=(( x. x) z) d=z
- o=(( x. x) ( y. ( z. z))) d=( y. ( z. z))
- o=( x. (( y. y) x)) d=( x. x)
- o=(( x. ( y. x)) ( a. a)) d=( y. ( a. a))
- o=((( x. ( y. x)) ( a. a)) ( b. b)) d=( a. a)
- o=(( x. ( y. y)) ( a. a)) d=( y. y)
- o=((( x. ( y. y)) ( a. a)) ( b. b)) d=( b. b)
- o=(( x. (x x)) ( x. (x x))) d=Error
- o=((( x. ( y. x)) ( a. a)) (( x. (x x)) ( x. (x x)))) d=( a. a)
- o=(( a. ( b. (a (a (a b))))) ( c. ( d. (c (c d))))) d=( b. ( d. (b (b (b (b (b (b (b (b d))))))))))
- o=(( f. ( x. (f x))) ( y. ( x. y))) d=( x. ( x. x))
- */
- #define R return
- #define E if(i>=M||j>=M)R-1;
- #define H d[j++]
- enum{O=40,C,M=3999}; // assume ascii
- signed char Q[M],D[M],t[M],Z,*o=Q,*d=D,*T;
- int m,n,s,c,w;
- K(i,j,k)
- {!Z&&(Z=t[O]=1)+(t[C]=-1); //inizializza tabelle
- E;if(!o[i]){H=0;R 0;}
- if((c=t[o[i]]+t[o[i+1]])!=2||o[i+2]!=92)
- {H=o[i++]; R K(i,j,i);}
- for(i+=2,w=0;i<M&&o[i]&&c;++i)
- c+=t[o[i]],!w&&c==1?w=i:0;
- E;
- if(c){for(;H=o[i++];)E;R 0;}
- // 01234567w12 i
- // ((/ x. x) z)
- // x w z
- // o[k+4]..o[k+5]; o[k+7]..o[w]; o[w+2]..o[i-1]
- // sostituzione
- // sostituisce a x z in w e lo scrive in d
- for(c=k+7,n=j;c<w&&j<M;++c)
- if(o[c]==o[k+4])
- {if(o[c+1]==46) // non puo' sostituire una variabile dove c'e' lambda
- {d[n++]=o[k++]; R K(k,n,k);}
- for(m=w+2;m<i-1&&j<M;++m)
- H=o[m];
- }
- else H=o[c];
- E;
- Z=2;
- R K(i,j,i);
- }
- char*L(char*a)
- {for(s=n=0;n<M&&(o[n]=a[n]);++n);
- if(n==M)R 0;
- for(;++s<M;)
- {Z=0;
- n=K(0,0,0);
- // if(Z==2)printf("n=%d>%sn", n, d);
- if(Z==2&&n!=-1)T=d,d=o,o=T;
- else break;
- }
- R n==-1||s>=M?0:d;
- }
Add Comment
Please, Sign In to add comment