?

Log in

No account? Create an account
De profundis clamavi - Valse oubliée [entries|archive|friends|userinfo]
aruslan

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
[ delicious | aruslan's delicious ]

Links
[Links:| Tags Profile Friends FG1 PP gamedev XNA FF Entries Comments Memories ]

De profundis clamavi [Dec. 19th, 2004|03:39 pm]
aruslan
[Tags|, , , , ]
[Current Mood |Blueish]
[Current Music |O. Peterson]

Читал сегодня следующее:
typedef char C;typedef long I;
typedef struct a{I t,r,d[3],p[2];}*A;
#define P printf
#define R return
#define V1(f) A f(w)A w;
#define V2(f) A f(a,w)A a,w;
#define DO(n,x) {I i=0,_n=(n);for(;i < _n;++i){x;}}
I *ma(n){R(I*)malloc(n*4);}mv(d,s,n)I *d,*s;{DO(n,d[i]=s[i]);}
tr(r,d)I *d;{I z=1;DO(r,z=z*d[i]);R z;}
A ga(t,r,d)I *d;{A z=(A)ma(5+tr(r,d));z->t=t,z->r=r,mv(z->d,d,r);R z;}
V1(iota){I n=*w->p;A z=ga(0,1,&n);DO(n,z->p[i]=i);R z;}
V2(plus){I r=w->r,*d=w->d,n=tr(r,d);A z=ga(0,r,d);
 DO(n,z->p[i]=a->p[i]+w->p[i]);R z;}
V2(from){I r=w->r-1,*d=w->d+1,n=tr(r,d);
 A z=ga(w->t,r,d);mv(z->p,w->p+(n**a->p),n);R z;}
V1(box){A z=ga(1,0,0);*z->p=(I)w;R z;}
V2(cat){I an=tr(a->r,a->d),wn=tr(w->r,w->d),n=an+wn;
 A z=ga(w->t,1,&n);mv(z->p,a->p,an);mv(z->p+an,w->p,wn);R z;}
V2(find){}
V2(rsh){I r=a->r?*a->d:1,n=tr(r,a->p),wn=tr(w->r,w->d);
 A z=ga(w->t,r,a->p);mv(z->p,w->p,wn=n>wn?wn:n);
 if(n-=wn)mv(z->p+wn,z->p,n);R z;}
V1(sha){A z=ga(0,1,&w->r);mv(z->p,w->d,w->r);R z;}
V1(id){R w;}V1(size){A z=ga(0,0,0);*z->p=w->r?*w->d:1;R z;}
pi(i){P("%d ",i);}nl(){P("\n");}
pr(w)A w;{I r=w->r,*d=w->d,n=tr(r,d);DO(r,pi(d[i]));nl();
 if(w->t)DO(n,P("< ");pr(w->p[i]))else DO(n,pi(w->p[i]));nl();}

C vt[]="+{~<#,";
A(*vd[])()={0,plus,from,find,0,rsh,cat},
 (*vm[])()={0,id,size,iota,box,sha,0};
I st[26]; qp(a){R a>='a'&&a<='z';}qv(a){R a<'a';}
A ex(e)I *e;{I a=*e;
 if(qp(a)){if(e[1]=='=')R st[a-'a']=ex(e+2);a= st[ a-'a'];}
 R qv(a)?(*vm[a])(ex(e+1)):e[1]?(*vd[e[1]])(a,ex(e+2)):(A)a;}
noun(c){A z;if(c<'0'||c>'9')R 0;z=ga(0,0,0);*z->p=c-'0';R z;}
verb(c){I i=0;for(;vt[i];)if(vt[i++]==c)R i;R 0;}
I *wd(s)C *s;{I a,n=strlen(s),*e=ma(n+1);C c;
 DO(n,e[i]=(a=noun(c=s[i]))?a:(a=verb(c))?a:c);e[n]=0;R e;}

main(){C s[99];while(gets(s))pr(ex(wd(s)));}
Много думал. Еще раз перечитал товарища dr_klm о языке J.
LinkReply

Comments:
From: g_ray
2004-12-19 01:46 pm (UTC)
афигенно :)
(Reply) (Thread)
[User Picture]From: digimind
2004-12-19 03:22 pm (UTC)
Это чтобы мозги были стройные и подтянутые :).
Без syntax sugar :)).
(Reply) (Thread)
[User Picture]From: roboscop
2004-12-19 11:25 pm (UTC)
JScript - это чуть упрощенная и веб-ориентированная версия языка J.
(Reply) (Thread)
[User Picture]From: muchandr
2004-12-20 12:07 am (UTC)
Ой ли?
(Reply) (Parent) (Thread)
[User Picture]From: roboscop
2004-12-20 01:51 am (UTC)
Точно тебе говорю.
(Reply) (Parent) (Thread)
[User Picture]From: roboscop
2004-12-20 01:56 am (UTC)
J# тоже крут, впрочем %)
(Reply) (Parent) (Thread)
[User Picture]From: muchandr
2004-12-20 09:38 am (UTC)
А почему я сходства не замечаю? Я всего предполагал, что JavaScript никто толком не дизайнал, а просто прилепили когда-то к Нетскейпу совершенно ad-hoc, чтобы решить пару сиюминутных проблем. Однако читал недавно телегу у Пола Грэма по-моему, про то, что это мол все syntactic sugar для Лиспа, так что я теперь и не знаю, верить тебе или нет. Это где-нибудь документировано?

Что может быть общего у скалярного языка, в котором практически все - строка и векторным языком, в котором базовая структура данных - многомерная матрица? В JavaScript-e вообще лямбда-то есть? Надо будет поискать ту телегу про Лисп...
(Reply) (Parent) (Thread)
[User Picture]From: aruslan
2004-12-20 06:46 pm (UTC)

Голос Станиславского

Вот про лямбду и curry в JavaScript я верю как раз легко.
А вот про связь J и JavaScript я не верю совсем :)
(Reply) (Parent) (Thread)
[User Picture]From: muchandr
2004-12-20 07:09 pm (UTC)

Re: Голос Станиславского

Причем я чего-то там ни того, ни того не припоминаю.
(Reply) (Parent) (Thread)
[User Picture]From: muchandr
2004-12-19 11:54 pm (UTC)
Думать вредно :)
(Reply) (Thread)
[User Picture]From: glebedev
2004-12-20 01:06 pm (UTC)
Клёвый язык %) Спасибо что ссылку не забыл.
(Reply) (Thread)