Frage

Ich versuche, eine Funktion Array zu machen, die ich in einem List.reduce HOF bin mit. Ich habe eine

haben
let minimax = [| (min : int->int->int); max |]

, die funktionieren großartig, aber jetzt mag ich den maximalen Wert einer Liste bekommen, so dass ich dachte:

let minimax = [|List.min; List.max|]

Dies ist jedoch führt den folgenden Fehler:

Minimax.fs (175,5): Fehler FS0030: Wertbeschränkung. Der Wert ‚Minimax‘ wurde gefolgert generischen Typ haben     val Minimax: ( '_a Liste ->' _a) [], wenn ‚_a: Vergleich
Entweder definieren ‚Minimax‘ als einfache Daten Begriff, sie machen eine Funktion mit expliziten Argumente oder, wenn Sie nicht beabsichtigen, für sie generisch zu sein, eine Art Anmerkung hinzuzufügen.

Ich habe eine Art Anmerkung wie folgt aus:

let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]

und es kompiliert. Das Problem ist jetzt, mit dem List.reduce,

| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)

Typenkonflikt. In Erwartung einer TreeOfPosition -> TreeOfPosition -> TreeOfPosition aber eine TreeOfPosition Liste gegeben -> TreeOfPosition Der Typ 'TreeOfPosition' nicht mit dem Typ 'TreeOfPosition Liste' überein

Danke für jeden Tipp,

Pedro Dusso

War es hilfreich?

Lösung

Das Problem ist, dass min auf zwei Werten arbeitet, aber List.min arbeitet auf einer Liste von Werten, so kann man nicht nur eine Funktion für die andere ersetzen. Da List.min grundsätzlich als List.reduce min definiert ist, können Sie wahrscheinlich bekommen nur loswerden der List.reduce und minimax[minormax] direkt anzuwenden. Ich kann nicht sehen, wie das besser als Ihre ursprüngliche Lösung mit min und max wäre, wenn ... vielleicht könnten Sie einigen zusätzlichen Kontext zu machen, damit es klarer ist genau das, was Problem Sie versuchen zu lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top