Oxi allh perl

Dimitris Mexis m65 at vivodinet.gr
Tue Jul 11 16:26:19 EEST 2006


On Tue, 11 Jul 2006 15:32:56 +0300, Giorgos Keramidas wrote:

> On 2006-07-11 14:12, Christos Ricudis <ricudis at komodino.itc.auth.gr> wrote:
>> SIGA mwre :
>>
>> #!perl
>> #
>> # Disclaimer : I have only proved this code correct (*), not acutally
>> tested it.
>> # (*) for simplicity, I have ommited some minor irrelevant issues
>> involving infinity
>> #
>> # I/O tape
>> $tape="00101001110101010010H";
>> # transitions table
>> # "$transitions[]="state,read,write,movement,new state";
>> $transitions[0]="0,0,1,r,0";
>> $transitions[1]="0,1,0,r,0";
>> $transitions[2]="0,H,H,l,1";
>> #
>> $halt=0;
>> $curstate=0;
>> $curpos=0;
>> while ($halt==0) {
>>    $match=0;
>>    foreach $i (@transitions) {
>>       ($state,$read,$write,$movement,$newstate)=split(/,/,$i);
>>       if (($state==$curstate) && ($read eq substr($tape,$curpos,1))) {
>>          $match=1;
>>          $curstate=$newstate;
>>          substr($tape,$curpos,1)=$write;
>>          if ($movement=="r") {
>>                $curpos++;
>>          } elsif ($movement=="l") {
>>                $curpos--;
>>          }
>>          break;                                                }
>>    }
>>    if ($match==0) {
>>        print "$tape\n";
>>        $halt=1;
>>    }
>> }
>>
>> Twra to mono pou exeis na kaneis einai na ry8miseis swsta to $tape kai
>> to $transitions[], kai na ftiakseis enan TCL interpreter.
> 
> On 2006-07-11 14:13, Dimitris Mexis <m65 at vivodinet.gr> wrote:
>> Pare Pare kosme....
>> Lisp uber alles! Perl pf!
> 
> Your wish is granted:
> 
> | CL-USER> (let ((tape #(0 0 1 0 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 0 H))
> |                (transitions #(#(0 0 1 r 0)
> |                               #(0 1 0 r 0)
> |                               #(0 H H l 1))))
> |            (let (halt (curstate 0) (curpos 0))
> |              (loop while (not halt)
> |                   do (let (match)
> |                        (loop for x across transitions
> |                           do (destructuring-bind (s r w m ns) (loop for v across x collect v)
> |                                (when (and (equal s curstate) (equal r (aref tape curpos)))
> |                                  (setq match t
> |                                        curstate ns)
> |                                  (setf (aref tape curpos) w)
> |                                  (setq curpos
> |                                        (+ curpos (cond ((equal 'R m) +1)
> |                                                        ((equal 'L m) -1)
> |                                                        (t 0))))
> |                                    (return t))))
> |                        (when (not match)
> |                            (format t "~&~A" tape)
> |                            (setq halt t))))))
> | #(1 1 0 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 0 1 H)
> | NIL
> | CL-USER>
> 
> Na perimenw ena TCL interpreter?

Respect!



More information about the Linux-greek-users mailing list