Seite 1 von 1

Funktionen höherer Ordnung auf listen

Verfasst: Dienstag 18. Mai 2021, 13:35
von deri
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!

Re: Funktionen höherer Ordnung auf listen

Verfasst: Dienstag 18. Mai 2021, 15:17
von __deets__
Wir liefern keine Lösungen auf Bestellung. Siehe auch

viewtopic.php?f=1&t=1689

Was hast du probiert? Was ist dir unklar?

Re: Funktionen höherer Ordnung auf listen

Verfasst: Dienstag 18. Mai 2021, 18:19
von __blackjack__
@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)
}