« Kapillare, Parabeln, Trägheit.... | Main| Neu in meinem Bücherregal »

Die Türme von Hanoi

10
Kategorie     
Die Türme von Hanoi ->
Tower_of_Hanoi.gif

Eine Beschreibung findet man wie immer bei Wikipedia. Das jetzt alleine in C# umzusetzen wäre nicht zielführend. Aber als Beispiel für ein MVP-Pattern geht es. Aber man kann noch mehr machen ->
HanoiWinForm.png
HanoiConsole.png

Oben einmal das Front-End als Winform und Console.

Was muß man jetzt eigentlich beachten, wenn man die Implementierung in F# vornehmen möchte

Die Implementierung sieht wie folgt aus ->
namespace HanoiSolverFSharp

open HanoiSolver

type public HanoiRecursiveSolverFSharp() =
   
    \DefaultValue>\val mutable OnDiscMove : moveEventHandler
   
    member this.HanoiRecSolver(numberOfDiscs : int,from : int,target: int,help: int) =
        if (numberOfDiscs > 0) then
          this.HanoiRecSolver((numberOfDiscs-1),from,help,target)
          this.OnDiscMove.Invoke(from,target)
          this.HanoiRecSolver((numberOfDiscs-1),help,target,from)
       

    interface IModel with
        member x.solveHanoi(numberOfDiscs) = x.HanoiRecSolver(numberOfDiscs,1,2,3)
        member x.add_OnDiscMove(f) = x.OnDiscMove <- f
        member x.remove_OnDiscMove(f) = x.OnDiscMove <- null

    member public x.solveHanoi(numberOfDiscs) = (x :> IModel).solveHanoi(numberOfDiscs)
    member public x.add_OnDiscMove(f) = (x :> IModel).add_OnDiscMove(f)
    member public x.remove_OnDiscMove(f) = (x :> IModel).remove_OnDiscMove(f)

Habe mal fett markiert, was mir so aufgefallen ist

val mutable OnDiscMove : moveEventHandler man braucht eine mutable Reference um das Delegate zu speichern, da man es ansonsten nicht mehr setzen könnte!
this.OnDiscMove.Invoke(from,target) der Delegate wird mit Invoke aufgerufen!
interface IModel Interfaces werden immer explicit implementiert, deshalb sind weiter unten die Impliziten noch einmal vorhanden!
(x :> IModel).solveHanoi(numberOfDiscs) in den Impliziten werden die Expliciten aufgerufen, durch einen Type-Cast
event gibt es in F# nicht, deshalb die Implementierung der add_ und remove_-Methoden.

Gruß JJR
P.S.: Hier noch die Solution ->

Mach einen Kommentar

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)

Amazon


Impressum

Firmenname: Peanuts-Soft
Straße Nummer: Biinger Strasse 8
PLZ Ort: 55263 Wackernheim
Telefon: +491772134526
E-Mail: joerg.reck @ peanuts-soft.de
Disclaimer: Peanuts-Soft übernimmt keine Garantie dafür, dass die auf dieser Website bereitgestellten Informationen vollständig, richtig und stets aktuell sind. Dies gilt auch für alle Links, auf die verwiesen wird. Peanuts-Soft ist für die Inhalte, auf die per Link verwiesen wird, nicht verantwortlich. Peanuts-Soft haftet nicht für konkrete, mittelbare und unmittelbare Schäden oder Schäden, die durch fehlende Nutzungsmöglichkeiten, Datenverluste oder entgangene Gewinne – sei es aufgrund der Nichteinhaltung vertraglicher Verpflichtungen, durch Fahrlässigkeit oder eine andere unerlaubte Handlung – im Zusammenhang mit der Nutzung von Dokumenten oder Informationen bzw. der Erbringung von Dienstleistungen entstehen, die auf dieser Web Site zugänglich sind.
Datenschutz: Inhalt und Gestaltung der Internetseiten sind urheberrechtlich geschützt. Eine Vervielfältigung der Seiten oder deren Inhalte bedarf der vorherigen schriftlichen Zustimmung von Peanuts-Soft.


Locations of visitors to this page

Powered By

Domino BlogSphere
Version 3.0.2