In meinem Code habe ich die folgenden zwei Methoden:Wie man ein Listenverständnis zu einer Beziehung macht?
public void AllDivisors(int max) {
lrel[int,list[int]] div = [ <i,d> | int i <- [0 .. max], list[int] d <- GetDivisors(i)];
println("<div>");
}
public list[int] GetDivisors(int n) {
return [ p | p <- [1..n], n % p == 0];
}
Die zweite (GetDivisors) gibt die Liste von Teilern für n
und gibt diese als list[int]
. Als nächstes möchte ich diese auf die Werte von n
mit einem lrel
in der ersten Methode (AllDivisors) zuordnen. Ich habe versucht, dies auf einmal mit einem Listenverständnis zu erreichen, aber das scheint nicht zu funktionieren.
rascal>GetDivisors(10);
list[int]: [1,2,5]
rascal>AllDivisors(10);
|project://Sevo/src/NumberEx.rsc|(189,1,<8,85>,<8,86>): Expected int, but got list[int]
Advice: |http://tutor.rascal-mpl.org/Errors/Static/UnexpectedType/UnexpectedType.html|
Ich habe eine harte Zeit, herauszufinden, wo Rascal ist ein int
erwarten aber eine list[int]
bekommen. Ich nehme an, es ist in d <- GetDivisors(i)
. Wie kann ich die richtigen Tupel in meinem Listenverständnis erzeugen?
Dieser letzte Ausdruck ist genau richtig! –