Auteur Sujet: Un Raytracer écrit en K (a variant of APL containing elements of Scheme)  (Lu 1145 fois)

0 Membres et 1 Invité sur ce sujet

/   hit 18 upper 6 leaf of 1325
s:(-3 3 -3 3;3 3 3 3;-3 -3 3 3)%sqrt 12;C:{[k;c;r]$[k-:1;((c;r*3);(,(c;r)),C[k;;r%2]'+c+r*s);(c;r)]}
s:C[6;0 -1 0.;1.];u:{x%sqrt x wsum x};e:%m:1e9;l:u 1 3 -2;b:0 0 -4.                        /scene
d:{[v;s]$[0>d:(n*n:c wsum v 1)-(c wsum c:(*s)-*v)-d*d:s 1;m;n>e+d:sqrt d;n-d;n>e-d;n+d;m]} /distance
i:{[v;m;s]$[@*s;$[(*m)>a:d[v;s];(a;*s);m];(*m)>d[v;*s];m i[v]/s 1;m]}                      /intersect
t:{[v;s]$[m=d:*r:i[v;m;s];0.;0>g:l wsum n:u(b:v[0]+d*v 1)-r 1;0.;m=*i[(b;l);m;s];g;0.]}    /trace
j:(&4 4 4 4)%4;k:16#(!4)%4;n:16
\t r:(|r){+/t[;s]'(b;)'u'+(x+j-n%2;y+k-n%2;n+16#0.)}\:/:r:!n

The small size of the interpreter and compact syntax of the language makes it possible for K applications to fit entirely within the level 1 cache of the processor. Vector processing makes efficient use of the cache row fetching mechanism and posted writes without introducing bubbles into the pipeline by creating a dependency between consecutive instructions.

Dans le même genre, le J :

  quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)

Tacit programming involves composing functions together and not referring explicitly to any variables. J's support for forks and hooks dictates rules on how arguments applied to this function will be applied to its component functions.