Funktionen höherer Ordnung auf listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
deri
User
Beiträge: 1
Registriert: Dienstag 18. Mai 2021, 13:26

Hallo zusammen, ich würde mich sehr freuen, wenn ihr mir bei meiner Aufgabe helfen könntet. ich komme leider nicht weiter. Die Aufgabe ist:


//gibt ein pair von zwei listen zurück:
// -die linke liste enthält alle Elemente, auf die das Prädikat p zutrifft
// -die rechte liste enthält alle Elemente, auf die das Prädikat p nicht zutrifft

fun<A> partition(list: List<A>, p: (A) -> Boolean): Pair<List<A>, List<A>>

Diese Funktion muss iterativ(mit veränderlichen Variablen und Schleifen) implementiert werden.


Vielen Dank im Voraus!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir liefern keine Lösungen auf Bestellung. Siehe auch

viewtopic.php?f=1&t=1689

Was hast du probiert? Was ist dir unklar?
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@deri: Das ist kein gültiges Python. Du solltest das erst einmal in gültiges Python übersetzen. Und dann gibt's die Funktionalität schon fast so im `more_itertools`-Modul:

Code: Alles auswählen

#!/usr/bin/env python3
from typing import Callable, Iterable, List, T, Tuple

from more_itertools import partition as _partition


def partition(
    iterable: Iterable[T], predicate: Callable[[T], bool]
) -> Tuple[List[T], List[T]]:
    """
    Gib ein Paar von zwei Listen zurück.  Die erste Liste enthält alle Elemente
    auf die das Prädikat zutrifft, die Zweite alle Elemente auf die das Prädikat
    nicht zutrifft.
    """
    return tuple(map(list, reversed(_partition(predicate, iterable))))


def main():
    print(partition(range(10), lambda n: n % 2 == 0))


if __name__ == "__main__":
    main()
In Kotlin, wonach die Syntax von der Funktionssignatur aussieht, könnte man das so lösen:

Code: Alles auswählen

fun<A> partition(list: List<A>, p: (A) -> Boolean): Pair<List<A>, List<A>> {
    val xs = ArrayList<A>()
    val ys = ArrayList<A>()
    for (a in list) (if (p(a)) xs else ys).add(a)
    return Pair(xs, ys)
}
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten