Check it Out
Man
Wie fängt man einen Löwen in der Wüste ?
Axiom 1: Die Menge der Löwen in der Wüste ist nicht leer.
Axiom 2: Sind Löwen in der Wüste, so ist auch ein Löwe im Käfig.
Schlußregel: Ist p ein richtiger Satz, und gilt "wenn p, so q", so ist auch q ein richtiger Satz.
Satz: Es ist ein Löwe im Käfig.
1 Fall: Der Löwe ist im Käfig. Dieser Fall ist trivial.
2 Fall: Der Löwe ist außerhalb des Käfigs. Dann stelle man sich in den Käfig und mache eine Inversion an den Käfigwänden. Auf diese Weise gelangt der Löwe in den Käfig und man selbst nach draußen :-).
Achtung: Bei Anwendung dieser Methode ist dringend darauf zu achten, daß man sich nicht auf den Mittelpunkt des
Käfigbodens stellt, da man sonst im Unendlichen verschwindet.
Achtung: Bei dieser Methode achte man darauf, daß das schöne Fell des Löwen nicht beschädigt wird.
W(n+1) = f (W(n)), n=0,1,2,... ( W(0)=Wüste )
wird die Wüste auf den Fixpunkt zusammengezogen. So gelangt der Löwe in den Käfig.
suche(Löwe,Wüste,_) :- var(Wüste),!,fail. % In einer nicht instantiierten W"uste % lassen sich keine L"owen fangen. suche(Löwe,Wüste,Wüste) :- atomic(Wüste), gefunden(Löwe,Wüste). % Wenn die W"uste atomar ist, % mu"s dort der L"owe sein. suche(Löwe,[],_):- !, fail. % Wenn die W"uste leer ist, ist auch % kein L"owe drin. suche(Löwe,[HEAD],HEAD) :- gefunden(Löwe,HEAD). % Wenn der L"owe im ersten Element % der W"uste ist, dann fertig. suche(Löwe,[_|T],X) :- suche(Löwe,T,X). % Sonst weiter schauen. fange(Was,Wo,Womit) :- fange(Was,Wo,WoGenau), bewege(Womit,WoGenau). gefunden(Was,Worin) :- member(Was, Worin). bewege(Was, _ ) :- retract(position(Was,_)), fail. bewege(Was,Wohin) :- asserta(position(Was,Wohin)). test_Wüste([Wüste_1, Wüste_2, Wüste_3, Wüste_4, Wüste_5, Wüste_6, Wüste_7, [Wüste_8, Löwe], Wüste_9, Wüste_A, [Wüste_B, wagen], Wüste_C, Wüste_D]). fange_Löwe_test :- bewege(Käfig,wagen), test_Wüste(Wüste), fange(Löwe,Wüste,Käfig).
MODULE Fang; FROM Problem IMPORT Loesung; BEGIN; Loesung; END Fang.
dosseg .DATA MAX equ 65535 Wüsten_Feld db MAX dup (0) Käfig db extern Löwe_Fkt_Nummer:Word ; DOS-Int. Nummer .CODE lds si, W_Feld ; ES:DI zeigt auf Anfang des Feldes cld mov CX,MAX ; CX als max. Index M1: lodsb cmp al,Löwe je Gefangen loop M1 jmp Error Gefangen: mov BX,SI mov AX,Löwe_Fkt_Nummer lds di, Käfig int 21h ; Dos-Interrupt, da alle aufwendigen Proc. in ; ASM ausgelagert werden sollen. Error: int 20h END
/* Ist ein Multi-User-Textadventures, geschrieben in C++-Clone. */ { Werbung : einloggen unter telnet 129.69.221.120 3333 und spielen } int fang(string str) { object ob1,ob2,ob3; if (!str || str!="Löwe mit Käfig") { write("WEN willst du mit WAS fangen ?\n"); return 1; } ob1=clone_object("/obj/Wüste"); /* Wüste enthält Löwe s.Aufgabe */ ob2=clone_object("/obj/Käfig"); if (!ob3=present("Löwe",ob1) { write("Es ist kein Löwe in der Wüste !\n"); /* Falls weggerannt */ return 1; } ob3->move(ob2); write("Der Löwe befinde sich jetzt im Käfig.\n"); return 1; } Diese Funktion muß noch an ein Ereignis angehängt werden, die Objekte Käfig.c und Wüste.c sind geeignet zu implementieren. 4.In Turbo Pascal geht dieses Problem natürlich auch: program Test_Loesung; type Wüster_Typ= Array[1..Max_X,1..Max_Y] of Index; Inhalt = { weiß nicht } Käfig_Typ = record voll : Boolean; Inhalt : Tier; end; Löwen_Typ = Tier; var Wüste : Wüster_Typ; Käfig : Käfig_Typ; Tiere : Array[1..Max_Tiere] of Tier; { Falls noch Kamele in der Wüste } { sind . } procedure Löwen_Fang; var i,j:Word; begin; Käfig.voll:=false; for i:=1 to Max_X do { Wüste nach Löwe absuchen } for j:=1 to Max_Y do if Wüste[i,j]=LöweN_INDEX then begin; Käfig.Inhalt:=Tiere[Wüste[i,j]]; Käfig.voll:=true; Wüste[i,j]:=KEINER_INDEX; exit; { Da der Käfig schon voll } end; { ist.Man könnte aber auch } { mit dieser Procedure alle Löwen einfangen. } WriteLn('Achtung ! Kein Löwe gefunden, wie wärs mit einem Kamel ?'); end; begin; Init; { Wüste, Tiere werden eingestellt. } Löwen_Fang; if (Käfig.voll) then WriteLn(' Ok,der Löwe ist im Käfig.') else WriteLn('Achtung ! Kein Löwe gefunden, durch "+ 'Abänderung in KAMEL_INDEX wäre vielleicht"+ #10#13'ein Kamel möglich ?'); end.
#!/bin/sh for $tier in $Wüste do if [ $tier = $Löwe ] then mv $tier $Käfig; exit 0 fi done