In der Sequenz von this topic bin ich ein System changing, das Blöcke zu Scala komponieren kann, damit ich Mustervergleich verwenden kann, um ein Rewrite-Regel-System zu erstellen.Mustererkennung in Listen, die Fallklassen enthalten
Allerdings bin ich fest.
Ich habe diese Klassen:
abstract class Block(n: String, in: List[Input], out: List[Out]){
def name = n; def outputs = out; def inputs = in
}
case class GroupBlock(n: String, blocks: List[Block], in: List[Input],
out: List[Out]) extends Block(n, in, out)
case class StandardBlock(n: String, in: List[Input], out: List[Out])
extends Block(n, in, out)
abstract class Point(n: String){ def name = n }
case class Input(n:String) extends Point(n)
abstract class Out(n: String) extends Point(n)
case class Output(n:String) extends Out(n)
case class Connection(connectedInput: Input, n: String) extends Out(n)
Jetzt Stellen Sie sich vor, dass ich dieses Beispiel ohne Display:
in diese Mapped:
val inputA = Input("sumA")
val inputB = Input("sumB")
val outputB = Output("B")
val sumAB =
GroupBlock("GroupedSum",
StandardBlock("Sum", List(inputA, inputB), List(outputB)) ::
StandardBlock("Input Provider", null, Connection(inputA, "A")::Nil) ::
StandardBlock("Input Provider", null, Connection(inputB, "B")::Nil) ::
Nil,
null,
List(outputB))
So .. Ich möchte sagen können: Im Fall 2 "Integer providers"
sind verbunden mit "Sum"
dann ...
ich es geschafft, zu identifizieren, mit Pattern-Matching, als ein „Input Provider“ existiert mit diesem:
sumAB match{
case GroupBlock(_,
StandardBlock("Input Provider", null, _ :: Connection(input, _) :: _) :: _,
_, _)
=> ...
case GroupBlock(_,
StandardBlock("Input Provider", null, Connection(input, _) :: _) :: _,
_, _)
=> ...
//Covering 2 more cases where the order on the list matters
}
Wie kann ich „Finde mich einen Fall sagen, dass ein StandardBlock
hat das hat den Namen "Input Provider"
in der Liste "? Weil das eines meiner Hauptprobleme ist. Ich brauche alle möglichen Kombinationen geben ... Nun wollte ich so etwas wie
case GroupBlock(_,
StandardBlock("Input Provider", null, Connection(input, _) ::
StandardBlock("Sum", inputList, _ ) :: _,
_, _)
tun, aber das bedeutet „Finde mir einen Fall, in dem ein‚Input Provider‘am Anfang der Liste ist und ein Sum Block folgt das "Sum" ". Und ich will: "Finde mich einen Fall, wo existiert ein" Input Provider "existiert in der gleichen Liste als" Sum ".
Diese Art von" Abfragen "in einer Liste sind auch nützlich, um zu überprüfen, ob der Input-Provider ist ... verbunden mit dem Sum Block, dass es gefunden wurde ich, dass variable input
und fragen Sie nach Fällen verwenden können, wo input
in Inputlist ist
Verwandte Frage: http: // stackoverflow.com/questions/9891638/sollte-ich-ändern-zu-scala-zu-erstellen-ein-system-mit-rewrite-rules/9895047 (ja, ich weiß, es ist deins - es könnte helfen, die Leute verstehen, was Sie wollen) –
Deshalb habe ich mit "In der Folge dieses Themas" mit einem Link dazu angefangen :) –
Sorry, das habe ich verpasst. –