2017-07-21 6 views
0

Gibt es eine Möglichkeit, eine Funktion (lst: List (T), fun:) zu schreiben, die durch lst iteriert und jedes Element teilweise auf fun anwendet und jedes Mal eine neue Funktion rekursiv zurückgibt tue dies solange, bis das Ergebnis der Funktionsanwendung lautet: Future [T] wie gewünscht und kein Funktionstyp?Rekursive Partielle Anwendung bis Typ/Ergebnis gewünscht

fun ist eine curried Funktion

Etwas Ähnliches.

def partialAppRec(lst : List[T], fun: ?) = 
//pardon the non-exhaustive pattern match 
    lst match { 
    case x::xs => 
    val test = fun(x) 
    if (test: Future[T]) return test 
    partialAppRec(xs, (fun(x) _)) 
} 

Aber welcher Typ würde Spaß sein? Gibt es überhaupt etwas zu sagen, das Spaß macht: Parameter zu ignorieren, die es brauchen könnte. Ich möchte in der Lage sein, eine fun Variable Parameter aufzunehmen, aber das Future[T] zurückgibt. f : ..=>Future[T] aber ich bin mir nicht sicher, ob so etwas existiert.

Irgendwelche Tipps/Vorschläge? Vielen Dank.

+0

Wenn Sie Ihren Spaß auf Elemente von 'List [T]' anwenden möchten, dann ist der einzige Parameter, den diese Funktion annehmen kann, 'T'. Verwenden Sie auch nicht "Rückkehr" in Scala, es ist (fast) immer eine falsche Sache zu tun. – Dima

+0

Nicht genau was ich machen möchte. Das wäre nur lst.map (...). Es ist mehr der Verwendung der lst Darstellung der Argumente Spaß und wollen Spaß (Elt1, Elt2, ..., Elt n) – Jay

+0

Ich würde zuerst über die Art von 'Spaß' denken, dann wird das Problem viel einfacher. Ich denke du willst 'Spaß', um eine ADT zurückzugeben, oder einfach nur eine normale' Option [Future [T]] '. – Reactormonk

Antwort

1

Wie wäre es mit Either?

+0

Das sieht so aus, als könnte es funktionieren, aber es scheint nicht atme zu checken. Etwas über "Anwendung nimmt keine Parameter" - nicht richtig Spaß zu erkennen. in 'fall head :: tail => fun (head) match {' – Jay

+0

@Jay habe ich ein paar Tippfehler behoben, sollte jetzt kompilieren. – Dima

Verwandte Themen