Towers of Hanoi: Difference between revisions

From Rosetta Code
Content added Content deleted
mNo edit summary
(revert spam)
Line 1: Line 1:
{{task}}
[http://gratis.rigour.info/content/view/qtek-imate.htm qtek imate jasjar] [http://guest.rigour.info/library/html/fodere-sedili/ fodere sedili] [http://online.rigour.info/programma-per/ programma per dj] [http://note.rigour.info/content/view/casse-acustiche.htm casse acustiche totem] [http://content.rigour.info/html/spartiti-canzoni/ spartiti canzoni italiane] [http://italy.rigour.info/blog/thes-tv.htm thes tv] [http://down.rigour.info/blog/robby.htm robby] [http://content.rigour.info/html/majorca/ majorca] [http://speed.rigour.info/lighting-break.htm lighting break - il biliardo] [http://load.rigour.info/view/new/leone-di.htm leone di lernia] [http://italy.rigour.info/blog/fiori-dacciaio.htm fiori dacciaio] [http://web.rigour.info/kate-melua/ kate melua] [http://milano.rigour.info/adsl-combo.htm adsl combo modem] [http://italy.rigour.info/blog/decreto-legislativo.htm decreto legislativo 7 settembre 2005 n] [http://gratis.rigour.info/content/view/il-testamento.htm il testamento del dottor mabuse] [http://speed.rigour.info/inculata-dal.htm inculata dal cavallo] [http://up.rigour.info/description/lib/divieto-di.htm divieto di fumare] [http://load.rigour.info/view/new/ultrastack-bgs.htm ultrastack bg412s] [http://pagina.rigour.info/nomi-cuccioli/ nomi cuccioli] [http://uve.rigour.info/blog/natale-galletto.htm natale galletto] [http://gratis.rigour.info/content/view/i-dieci.htm i dieci comandamenti] [http://here.rigour.info/blog/haerbin.htm haerbin] [http://guest.rigour.info/library/html/panda-fire/ panda fire] [http://paga.rigour.info/amicizia-relazione/ amicizia relazione] [http://note.rigour.info/content/view/cobra-.htm cobra - argo 512 mb radio] [http://up.rigour.info/description/lib/pmi-in.htm pmi in reggio calabria] [http://down.rigour.info/blog/the-rasmu.htm the rasmu] [http://it.rigour.info/topic/sordi-te/ sordi te c hanno mai mannato a quer paese] [http://web.rigour.info/telefonini-con/ telefonini con radio e lettore mp3] [http://web.rigour.info/dns/ dns] [http://web.rigour.info/filmati-hard/ filmati hard selen gratis] [http://all.rigour.info/lello/ lello] [http://it.rigour.info/topic/vagabondi-dellamore/ vagabondi dellamore] [http://here.rigour.info/blog/seven-seconds.htm seven seconds] [http://paga.rigour.info/micro-hifi/ micro hi-fi dvd cmt-dv2d] [http://down.rigour.info/blog/sputtanamento.htm sputtanamento] [http://paga.rigour.info/oki-ml/ oki ml 3320] [http://load.rigour.info/view/new/stradario-praga.htm stradario praga] [http://blog.rigour.info/web/franchising-attivita/ franchising attivita] [http://milano.rigour.info/www-comune.htm www comune di bacoli it] [http://blog.rigour.info/web/casa-mobile/ casa mobile] [http://uve.rigour.info/blog/www-lapolar.htm www lapolar cl] [http://milano.rigour.info/volvo-v.htm volvo v 40 sport] [http://online.rigour.info/fiere-esposizioni/ fiere esposizioni roma] [http://it.rigour.info/topic/haemopis/ haemopis] [http://uve.rigour.info/blog/foppapedretti-armadi.htm foppapedretti armadi] [http://blog.rigour.info/web/altoparlanti-/ altoparlanti 5 1 wireless] [http://down.rigour.info/blog/legge-n.htm legge n 239 del 23 08 04] [http://up.rigour.info/description/lib/i-vari.htm i vari stile del nuoto] [http://milano.rigour.info/house-of.htm house of the time] [http://speed.rigour.info/nvidia-geforce.htm nvidia geforce 5200 128mb tv] [http://gratis.rigour.info/content/view/ef-x.htm ef 2x] [http://uve.rigour.info/blog/execelsior.htm execelsior] [http://blog.rigour.info/web/lavastoviglie-larghezza/ lavastoviglie larghezza 50] [http://italy.rigour.info/blog/drunk-foto.htm drunk foto] [http://content.rigour.info/html/batterie-sony/ batterie sony np] [http://all.rigour.info/cgil-it/ cgil it] [http://note.rigour.info/content/view/la-porta.htm la porta dalle sette chiavi] [http://all.rigour.info/inculo/ inculo] [http://milano.rigour.info/supporto-per.htm supporto per plasma] [http://load.rigour.info/view/new/web-cam.htm web cam new york city] [http://up.rigour.info/description/lib/divx-harman.htm divx harman] [http://blog.rigour.info/web/jeep-cherokee/ jeep cherokee 2 8 crd] [http://note.rigour.info/content/view/bmw-guasti.htm bmw guasti] [http://online.rigour.info/fox/ fox] [http://note.rigour.info/content/view/getright.htm getright 5.0.2] [http://speed.rigour.info/cd-cocciante.htm cd cocciante notre dame] [http://uve.rigour.info/blog/video-di.htm video di california] [http://gratis.rigour.info/content/view/acronis-true.htm acronis true image server] [http://pagina.rigour.info/auto-noleggio/ auto noleggio barcellona pozzo gotto] [http://pagina.rigour.info/blackwood-algernon/ blackwood, algernon] [http://content.rigour.info/html/textbridge-pro/ textbridge pro] [http://online.rigour.info/katie-price/ katie price sexy] [http://milano.rigour.info/kit-scaffale.htm kit scaffale] [http://milano.rigour.info/lisola-del.htm lisola del sogno - amori e canzoni] [http://italy.rigour.info/blog/plotter-a.htm plotter a1 hp 430] [http://here.rigour.info/blog/ponography.htm ponography] [http://guest.rigour.info/library/html/saez/ saez] [http://guest.rigour.info/library/html/gps-bt/ gps bt 77] [http://web.rigour.info/hifi/ hifi 5 1] [http://speed.rigour.info/borsa-louis.htm borsa louis vuitton] [http://speed.rigour.info/luoghi-pubblici.htm luoghi pubblici] [http://here.rigour.info/blog/ups.htm ups 2 000] [http://content.rigour.info/html/fiat-stilo/ fiat stilo jtd sw] [http://paga.rigour.info/cordless-logitech/ cordless logitech dinovo] [http://online.rigour.info/v-usb/ v150 usb driver] [http://note.rigour.info/content/view/hotel-lecco.htm hotel lecco] [http://pagina.rigour.info/porno-black/ porno black] [http://speed.rigour.info/easyshare-v.htm easyshare v530] [http://gratis.rigour.info/content/view/foto-pancioni.htm foto pancioni] [http://guest.rigour.info/library/html/big-boob/ big boob] [http://up.rigour.info/description/lib/compaq-amd.htm compaq amd sempron 3200] [http://speed.rigour.info/windous-media.htm windous media] [http://paga.rigour.info/la-commedia/ la commedia di dio] [http://guest.rigour.info/library/html/frasi-santini/ frasi santini] [http://speed.rigour.info/vanessa-vanna.htm vanessa vanna] [http://it.rigour.info/topic/namie-amuro/ namie amuro] [http://down.rigour.info/blog/bomboniera-fai.htm bomboniera fai te] [http://note.rigour.info/content/view/invito-ad.htm invito ad un compleanno] [http://all.rigour.info/errore/ errore 734] [http://it.rigour.info/topic/sat-modem/ sat modem pci] [http://speed.rigour.info/ub-breath.htm ub40 breath] [http://paga.rigour.info/daniela-santanche/ daniela santanche] [http://all.rigour.info/bianca-d/ bianca d antonio] [http://all.rigour.info/yamaha-rxv/ yamaha rx-v 2500] [http://pagina.rigour.info/orologio-philip/ orologio philip watch] [http://milano.rigour.info/serena-gritta.htm serena gritta] [http://down.rigour.info/blog/ci-vorrebbe.htm ci vorrebbe un amico] [http://italy.rigour.info/blog/disco-latino.htm disco latino] [http://paga.rigour.info/igor-sibaldi/ igor sibaldi] [http://speed.rigour.info/canon-bubblejet.htm canon bubblejet pixmania] [http://online.rigour.info/audi-a/ audi a3 toscana] [http://italy.rigour.info/blog/hp.htm hp 9300] [http://gratis.rigour.info/content/view/china-rose.htm china rose] [http://all.rigour.info/baccaro/ baccaro] [http://italy.rigour.info/blog/dolore.htm dolore] [http://dir.rigour.info/sigma-mm/ sigma 55-200mm f4-5 6 dc] [http://gratis.rigour.info/content/view/elettrostimolatori-gymmy.htm elettrostimolatori gymmy] [http://blog.rigour.info/web/volo-abbiategrasso/ volo abbiategrasso] [http://milano.rigour.info/sweetyears.htm sweetyears] [http://content.rigour.info/html/scara/ scara] [http://here.rigour.info/blog/assicurazione-conegliano.htm assicurazione conegliano] [http://dir.rigour.info/radeon/ radeon 9250 256] [http://uve.rigour.info/blog/politica-usa.htm politica usa] [http://all.rigour.info/claudio-roma/ claudio roma] [http://italy.rigour.info/blog/lemano.htm lemano] [http://it.rigour.info/topic/hard-disk/ hard disk 2 5 mk] [http://up.rigour.info/description/lib/testo-canzone.htm testo canzone sanremo] [http://dir.rigour.info/pittura-a/ pittura a calce foto] [http://dir.rigour.info/permission-to/ permission to land] [http://here.rigour.info/blog/cantante-pepe.htm cantante pepe] [http://web.rigour.info/legge-n/ legge n 168 del 2004] [http://dir.rigour.info/yamaha-ystsw/ yamaha yst-sw1500] [http://uve.rigour.info/blog/trolley-.htm trolley 4 ruote] [http://paga.rigour.info/dvd-vergini/ dvd vergini 16x] [http://down.rigour.info/blog/www-jhon.htm www jhon cena it] [http://up.rigour.info/description/lib/globe.htm globe] [http://uve.rigour.info/blog/radda-in.htm radda in chianti] [http://speed.rigour.info/espn-snooker.htm espn snooker 2004] [http://load.rigour.info/view/new/mykonos-alberghi.htm mykonos alberghi e hotel] [http://down.rigour.info/blog/musica-heavy.htm musica heavy metal] [http://note.rigour.info/content/view/video-militari.htm video militari porno iraq] [http://milano.rigour.info/finepix-.htm finepix 710 fujifilm] [http://down.rigour.info/blog/musicas-de.htm musicas de pedro infante] [http://note.rigour.info/content/view/i-tre.htm i tre guerrieri] [http://gratis.rigour.info/content/view/lettori-dvd.htm lettori dvd e divx daewoo dv 500] [http://load.rigour.info/view/new/appunti-anatomia.htm appunti anatomia] [http://speed.rigour.info/hirsau.htm hirsau] [http://speed.rigour.info/mappe-diodi.htm mappe diodi] [http://guest.rigour.info/library/html/o-rap/ o rap e tano] [http://load.rigour.info/view/new/snoop-dogg.htm snoop dogg] [http://gratis.rigour.info/content/view/racconti-porno.htm racconti porno incesto] [http://online.rigour.info/super-filmotheque/ super filmotheque] [http://dir.rigour.info/vestiti-di/ vestiti di alessandra] [http://blog.rigour.info/web/que-pides/ que pides tu] [http://up.rigour.info/description/lib/lo-sbaglio.htm lo sbaglio di essere vivo] [http://online.rigour.info/cd-britney/ cd britney spears] [http://content.rigour.info/html/tamenghest/ tamenghest] [http://down.rigour.info/blog/volo-aereo.htm volo aereo pisa brindisi] [http://gratis.rigour.info/content/view/silvia-pastore.htm silvia pastore] [http://load.rigour.info/view/new/le-same.htm le same di guida] [http://content.rigour.info/html/flamenko/ flamenko] [http://down.rigour.info/blog/mkc.htm mkc 600] [http://content.rigour.info/html/alessandro-e/ alessandro e il mare] [http://online.rigour.info/sony-dcrhc/ sony dcr-hc 10] [http://dir.rigour.info/honda-cbr/ honda cbr 900] [http://here.rigour.info/blog/gioco-cypher.htm gioco cypher] [http://note.rigour.info/content/view/manche-la.htm manche, la-] [http://note.rigour.info/content/view/dule-el.htm dule el amor] [http://down.rigour.info/blog/foto-sexi.htm foto sexi pamela prati] [http://milano.rigour.info/the-undertaker.htm the undertaker] [http://blog.rigour.info/web/giudice-fashion/ giudice fashion institute] [http://speed.rigour.info/resta-in.htm resta in ascolto di laura pausini] [http://load.rigour.info/view/new/io-canto.htm io canto] [http://italy.rigour.info/blog/woman-iii.htm woman iii] [http://guest.rigour.info/library/html/televisori-thomson/ televisori thomson lcd 27] [http://uve.rigour.info/blog/sony-ericsson.htm sony ericsson t610] [http://milano.rigour.info/angela-.htm angela - il suo unico peccato era lamore...] [http://web.rigour.info/totali-/ totali spies] [http://here.rigour.info/blog/penner.htm penner] [http://guest.rigour.info/library/html/usb-wlan/ usb wlan] [http://down.rigour.info/blog/esclusione-della.htm esclusione della donna islamica] [http://web.rigour.info/valore-auto/ valore auto usata eurotax] [http://online.rigour.info/guadagno-dell/ guadagno dell agente immobiliare] [http://all.rigour.info/fisiting/ fisiting] [http://load.rigour.info/view/new/in-pubblico.htm in pubblico] [http://it.rigour.info/topic/foto-divi/ foto divi nudi] [http://note.rigour.info/content/view/temi-svolti.htm temi svolti su questione irak] [http://web.rigour.info/s-ela/ s ela langa e cosi] [http://note.rigour.info/content/view/valentino-.htm valentino 1138 s] [http://uve.rigour.info/blog/calcoli.htm calcoli] [http://milano.rigour.info/download-film.htm download film porno casalinghi] [http://online.rigour.info/server-news/ server news libero] [http://load.rigour.info/view/new/porte-gatti.htm porte gatti] [http://guest.rigour.info/library/html/televisori-batterie/ televisori batterie] [http://guest.rigour.info/library/html/mercedes-c/ mercedes c 200 sw a benzina] [http://content.rigour.info/html/gente-della/ gente della notte] [http://down.rigour.info/blog/santa-giusta.htm santa giusta, stagno di-] [http://load.rigour.info/view/new/valle-aurina.htm valle aurina] [http://pagina.rigour.info/t-ibm/ t42 ibm] {{task}}


In this task, the goal is to solve the Towers of Hanoi problem with recursivity.
In this task, the goal is to solve the Towers of Hanoi problem with recursivity.
Line 13: Line 13:
if Ndisks > 0 then
if Ndisks > 0 then
Hanoi(Ndisks - 1, Start_Peg, Via_Peg, End_Peg);
Hanoi(Ndisks - 1, Start_Peg, Via_Peg, End_Peg);
Put_Line("Move disk"
Put_Line("Move disk" & Natural'Image(Ndisks) & " from " & Pegs'Image(Start_Peg) & " to " &
Pegs'Image(End_Peg));
Hanoi(Ndisks - 1, Via_Peg, End_Peg, Start_Peg);
end if;
end Hanoi;
begin
Hanoi(4);
end Towers;


==[[AppleScript]]==
[[Category:AppleScript]]
global moves --this is so the handler 'hanoi' can see the 'moves' variable
set moves to ""
hanoi(4, "peg A", "peg C", "peg B")
on hanoi(ndisks, fromPeg, toPeg, withPeg)
if ndisks is greater than 0 then
hanoi(ndisks - 1, fromPeg, withPeg, toPeg)
set moves to moves & "Move disk " & ndisks & " from " & fromPeg & " to " & toPeg & return
hanoi(ndisks - 1, withPeg, toPeg, fromPeg)
end if
return moves
end hanoi


==[[C plus plus|C++]]==
[[Category:C plus plus]]
'''Compiler:''' [[GCC]]

void move(int n, int from, int to, int via) {
if (n == 1) {
std::cout << "Move disk from pole " << from << " to pole " << to << std::endl;
} else {
move(n - 1, from, via, to);
move(1, from, to, via);
move(n - 1, via, to, from);
}
}



==[[E]]==
[[Category:E]]

def move(out, n, fromPeg, toPeg, viaPeg) {
if (n.aboveZero()) {
move(out, n.previous(), fromPeg, viaPeg, toPeg)
out.println(`Move disk $n from $fromPeg to $toPeg.`)
move(out, n.previous(), viaPeg, toPeg, fromPeg)
}
}
move(stdout, 4, def left {}, def right {}, def middle {})

==[[Forth]]==
[[Category:Forth]]
With locals:

CREATE peg1 ," left "
CREATE peg2 ," middle "
CREATE peg3 ," right "
: .$ COUNT TYPE ;
: MOVE-DISK
LOCALS| via to from n |
n 1 =
IF CR ." Move disk from " from .$ ." to " to .$
ELSE n 1- from via to RECURSE
1 from to via RECURSE
n 1- via to from RECURSE
THEN ;

Without locals, executable pegs:

: left ." left" ;
: right ." right" ;
: middle ." middle" ;
: print ( t f -- )
CR ." Move disk from " execute ." to " execute ;
: move-disk ( v t f n -- v t f )
dup 1 = if drop 2dup print exit then
1- >R
rot swap R@ ( t v f n-1 ) recurse
rot swap 2dup print
swap rot R> ( f t v n-1 ) recurse
swap rot ;
: hanoi ( n -- )
1 max >R ['] right ['] middle ['] left R> move-disk drop drop drop ;

==[[Java]]==
[[Category:Java]]

public void move(int n, int from, int to, int via) {
if (n == 1) {
System.out.println("Move disk from pole " + from + " to pole " + to);
} else {
move(n - 1, from, via, to);
move(1, from, to, via);
move(n - 1, via, to, from);
}
}

==[[Perl]]==
[[Category:Perl]]
sub move {
my $n = shift;
my $from = shift;
my $to = shift;
my $via = shift;
if ($n == 1) {
print "Move disk from pole $from to pole $to.\n";
} else {
move($n - 1, $from, $via, $to);
move(1, $from, $to, $via);
move($n - 1, $via, $to, $from);
};
};

==[[Pop11]]==
[[Category:Pop11]]

define hanoi(n, src, dst, via);
if n > 0 then
hanoi(n - 1, src, via, dst);
printf('Move disk ' >< n >< ' from ' >< src >< ' to ' >< dst >< '.\n');
hanoi(n - 1, via, dst, src);
endif;
enddefine;

hanoi(4, "left", "middle", "right");

==[[Python]]==
[[Category:Python]]

<pre>
def hanoi(ndisks, startPeg=1, endPeg=3):
if ndisks:
hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
print "Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg)
hanoi(ndisks-1, 6-startPeg-endPeg, endPeg)

hanoi(ndisks=4)
</pre>

==[[Seed7]]==
[[Category:Seed7]]

const proc: hanoi (in integer: disk, in string: source, in string: dest, in string: via) is func
begin
if disk > 0 then
hanoi(pred(disk), source, via, dest);
writeln("Move disk " <& disk <& " from " <& source <& " to " <& dest);
hanoi(pred(disk), via, dest, source);
end if;
end func;

==[[Toka]]==
[[Category:Toka]]

value| sa sb sc n |
[ to sc to sb to sa to n ] is vars!
[ ( num from to via -- )
vars!
n 0 <>
[
n sa sb sc
n 1- sa sc sb recurse
vars!
." Move a ring from " sa . ." to " sb . cr
n 1- sc sb sa recurse
] ifTrue
] is hanoi

Revision as of 21:50, 21 August 2007

Task
Towers of Hanoi
You are encouraged to solve this task according to the task description, using any language you may know.

In this task, the goal is to solve the Towers of Hanoi problem with recursivity.

Ada

with Ada.Text_Io; use Ada.Text_Io;

procedure Towers is
   type Pegs is (Left, Center, Right);
   procedure Hanoi (Ndisks : Natural; Start_Peg : Pegs := Left; Via_Peg : Pegs := Center; End_Peg : Pegs := Right) is
   begin
      if Ndisks > 0 then
         Hanoi(Ndisks - 1, Start_Peg, Via_Peg, End_Peg);
         Put_Line("Move disk" & Natural'Image(Ndisks) & " from " & Pegs'Image(Start_Peg) & " to " &
            Pegs'Image(End_Peg));
         Hanoi(Ndisks - 1, Via_Peg, End_Peg, Start_Peg);
      end if;
   end Hanoi;
begin
   Hanoi(4);
end Towers;


AppleScript

global moves --this is so the handler 'hanoi' can see the 'moves' variable
set moves to ""
hanoi(4, "peg A", "peg C", "peg B")

on hanoi(ndisks, fromPeg, toPeg, withPeg)
    if ndisks is greater than 0 then
        hanoi(ndisks - 1, fromPeg, withPeg, toPeg)
        set moves to moves & "Move disk " & ndisks & " from " & fromPeg & " to " & toPeg & return
        hanoi(ndisks - 1, withPeg, toPeg, fromPeg)
    end if
    return moves
end hanoi


C++

Compiler: GCC

void move(int n, int from, int to, int via) {
  if (n == 1) {
    std::cout << "Move disk from pole " << from << " to pole " << to << std::endl;
  } else {
    move(n - 1, from, via, to);
    move(1, from, to, via);
    move(n - 1, via, to, from);
  }
}


E

def move(out, n, fromPeg, toPeg, viaPeg) {
    if (n.aboveZero()) {
        move(out, n.previous(), fromPeg, viaPeg, toPeg)
        out.println(`Move disk $n from $fromPeg to $toPeg.`)
        move(out, n.previous(), viaPeg, toPeg, fromPeg)
    }
}

move(stdout, 4, def left {}, def right {}, def middle {})

Forth

With locals:

CREATE peg1 ," left "   
CREATE peg2 ," middle " 
CREATE peg3 ," right " 

: .$   COUNT TYPE ;
: MOVE-DISK 
  LOCALS| via to from n | 
  n 1 =
  IF   CR ." Move disk from " from .$ ." to " to .$ 
  ELSE n 1- from via to RECURSE 
       1    from to via RECURSE 
       n 1- via to from RECURSE 
  THEN ;

Without locals, executable pegs:

: left   ." left" ;
: right  ." right" ;
: middle ." middle" ;

: print ( t f -- )
  CR ." Move disk from " execute ."  to " execute  ;
: move-disk ( v t f n -- v t f )
  dup 1 = if drop 2dup print exit then
  1-       >R
  rot swap R@ ( t v f n-1 ) recurse
  rot swap        2dup print
  swap rot R> ( f t v n-1 ) recurse
  swap rot ;
: hanoi ( n -- )
  1 max >R ['] right ['] middle ['] left R> move-disk drop drop drop ;

Java

 public void move(int n, int from, int to, int via) {
   if (n == 1) {
     System.out.println("Move disk from pole " + from + " to pole " + to);
   } else {
     move(n - 1, from, via, to);
     move(1, from, to, via);
     move(n - 1, via, to, from);
   }
 }

Perl

sub move {
    my $n    = shift;
    my $from = shift;
    my $to   = shift;
    my $via  = shift;

    if ($n == 1) {
        print "Move disk from pole $from to pole $to.\n";
    } else {
        move($n - 1, $from, $via, $to);
        move(1, $from, $to, $via);
        move($n - 1, $via, $to, $from);
    };
};

Pop11

define hanoi(n, src, dst, via);
if n > 0 then
    hanoi(n - 1, src, via, dst);
    printf('Move disk ' >< n >< ' from ' >< src >< ' to ' >< dst >< '.\n');
    hanoi(n - 1, via, dst, src);
endif;
enddefine;
hanoi(4, "left", "middle", "right");

Python

def hanoi(ndisks, startPeg=1, endPeg=3):
    if ndisks:
        hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
        print "Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg)
        hanoi(ndisks-1, 6-startPeg-endPeg, endPeg)

hanoi(ndisks=4)

Seed7

const proc: hanoi (in integer: disk, in string: source, in string: dest, in string: via) is func
  begin
    if disk > 0 then
      hanoi(pred(disk), source, via, dest);
      writeln("Move disk " <& disk <& " from " <& source <& " to " <& dest);
      hanoi(pred(disk), via, dest, source);
    end if;
  end func;

Toka

value| sa sb sc n |
[ to sc to sb to sa to n ] is vars!
[ ( num from to via -- )
  vars!
  n 0 <>
  [
    n sa sb sc 
    n 1- sa sc sb recurse
    vars!
    ." Move a ring from " sa . ." to " sb . cr
    n 1- sc sb sa recurse
  ] ifTrue
] is hanoi