Die Türme von Hanoi
Allgemein F# C# Pattern .Net
Die Türme von Hanoi ->
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 ->
Kategorie Die Türme von Hanoi ->
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 ->
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 ->