Einführung in die Funktionale Programmierung (einfach und praxisnah!)

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ต.ค. 2024

ความคิดเห็น • 174

  • @NiklasSteenfatt
    @NiklasSteenfatt  10 หลายเดือนก่อน +9

    Wer guckt das Video noch in 2023? Ich habe inzwischen übrigens mein komplettes Produktivitätssystem veröffentlicht: fokus.so

    • @jurgenrothenberg8428
      @jurgenrothenberg8428 9 หลายเดือนก่อน

      Ich, bin gerade dabei Dich kennen zu lernen. Einfach Supi wie Du den Kontent rüber zu bringen 🎆🎆🎆

    • @abdullahsarwar2549
      @abdullahsarwar2549 8 หลายเดือนก่อน +3

      2024 hier

  • @NiklasSteenfatt
    @NiklasSteenfatt  4 ปีที่แล้ว +31

    Ich musste das Video heute zweimal hochladen, weil beim ersten mal ein Fehler passiert war und man an einer Stelle gar nicht den richtigen Teil des Bildschirms sehen konnte. Das ist glücklicherweise sofort jemandem aufgefallen. Sorry, falls das jemanden verwirrt hat!

  • @tracetv8115
    @tracetv8115 4 ปีที่แล้ว +18

    Endlich mal ein Channel der vernünftige Programmierung zeigt, anstatt das 500ste Pr9grammier Tutorial, das dort aufhört, wo die eig. Programmierung anfängt.
    Bitte bring weiter so coole Paradigmen und spannende Themen!

  • @alinivan151
    @alinivan151 4 ปีที่แล้ว +44

    Sehr guter, qualitativ Hochwertiger Content. Vielen Dank!

  • @fentonmsu
    @fentonmsu 3 ปีที่แล้ว +68

    Endlich jemand, der richtiges Deutsch spricht.

    • @dergideon5301
      @dergideon5301 3 ปีที่แล้ว +1

      @TK KT ja

    • @spicemelange418
      @spicemelange418 3 ปีที่แล้ว +2

      Wer spricht keins ?

    • @multiarray2320
      @multiarray2320 2 ปีที่แล้ว

      @@spicemelange418 deine mudda wenn sie mir nen blowi gibt

  • @lukasschmahl147
    @lukasschmahl147 2 ปีที่แล้ว +1

    Ich bereue mein Abo keineswegs. Content vom aller feinsten. Jeder der das Glück haben darf von dir Unterrichtet zu werden kann sich glücklich schätzen!

  • @memorial2k8
    @memorial2k8 4 ปีที่แล้ว +3

    dein kanal ist großartig! ich bin eigentlich musiker aber habe schon mein leben lang ein großes interesse für informatik und dein kanal macht sehr viel freude zu verfolgen! großartiger content, da bekommt man lust auch irgendwann einmal informatik zu studieren :D

  • @heinrichschiller4673
    @heinrichschiller4673 4 ปีที่แล้ว +8

    Ich, als Python nicht Programmierer, habe dein Video tatsächlich verstanden. Also sehr gut erklärt!

  • @bendikarbogast1229
    @bendikarbogast1229 3 ปีที่แล้ว +3

    Finde das Video echt super und verstehe jetzt endlich, wie man funktional programmiert. Direkt an 2 Freunde weiterempfohlen und die Hausaufgaben hab ich natürlich auch gemacht:
    SPOILER!
    def anzahl_gerade_reduce(xs: list) -> int:
    return reduce(lambda y, x: y+1 if x % 2 == 0 else y, xs, 0)
    def anzahl_gerade_filter(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    def curry(foo, x) -> Callable[[list], int]:
    return lambda y, z: foo(x, y, z)
    def mein_filter(foo, my_list: list) -> list:
    return reduce(lambda new_list, l: new_list+[int(l)] if foo(l) else new_list, my_list, [])

  • @KarlMarx.et.FriedrichEngels
    @KarlMarx.et.FriedrichEngels 3 ปีที่แล้ว +3

    Ich finde das Anki- und Cambridgevideo am besten. Weiter so💪👍

  • @ayoko5161
    @ayoko5161 18 วันที่ผ่านมา

    Danke für das Video. Anbei ein Beispiel in der Programmiersprache C#:
    SPOILER
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    public static class FunctionalProgrammingTasks
    {
    // Curry-Beispiel
    public static Func TimesX(int x) => y => x * y;
    // Aufgaben
    public static int CountEven(IEnumerable numbers) => numbers.Where(num => num % 2 == 0).Aggregate(0, (count, num) => count + 1);
    public static Func Curry(Func function, int x) => (y, z) => function(x, y, z);
    public static IEnumerable MyFilter(Func predicate, IEnumerable list) => list.Aggregate([], (a, b) => predicate(b) ? a.Concat([b]) : a).ToArray();
    // Testfunktion für die Curry-Funktion
    public static int Foo(int x, int y, int z) => x + y + z;
    public static void Test()
    {
    // Curry-Beispiel
    var TimesTwo = TimesX(2);
    var TimesThree = TimesX(3);
    Console.WriteLine(TimesTwo(10));
    Console.WriteLine(TimesThree(20));
    // Aufgaben
    Console.WriteLine(CountEven([4, 3, 6, 32, 2, 1, 23, 4]));
    var bar = Curry(Foo, 5);
    Console.WriteLine(bar(3, 20));
    Console.WriteLine("[" + string.Join(", ", MyFilter(x => x > 3, [1, 3, 2, 4, 5])) + "]");
    }
    }

  • @stefan_blohm
    @stefan_blohm 3 ปีที่แล้ว

    Ich habe mit Programmieren aufgehört, als Objektorientierung anfing, also etwa 1989 😅. Damals war es Cobol, PL/I, Pascal und Z80-Assembler. Danke, für die sehr verständliche Erklärung!

  • @businessparis9364
    @businessparis9364 4 ปีที่แล้ว +12

    Wow extrem qualitativ hochwertiger Content, weiter so! Ich bin Java Programmierer und im Prinzip gibt es dort genau die gleichen funktionalen Elemente, die du hier in Python demonstriert hast. (bis auf list comprehesions)

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +7

      Freut mich! Ja, hab ja sogar ein paar Beispiele in Java kurz im Video gezeigt. Zu Java wollte ich übrigens irgendwann in den nächsten Wochen nochmal ein Video machen. :)

  • @rp8133
    @rp8133 4 ปีที่แล้ว +5

    Tolles Video. Schön zu sehen, dass mit Python eine Sprache existiert, die komplizierte Aufgaben sehr elegant und einfach-zu-lesen lösen kann. Übrigens kann man statt Java auch C# als Parallelsprache hernehmen, denn C# bietet (in den letzten Jahren als Zuwachs gewonnen) manche Konzepte, die Python für C#-Umsteiger einfacher verständlich machen. Auch arbeitet sich C++ in die Welt von Closures (Lambdas), Coroutinen etc. pp. vor.
    Ein Trend in der Softwareentwicklung, den ich nach ca. 30 Jahren ausmachen kann: man versucht (in der Praxis) immer mehr, die objektorientierte und die funktionale Programmierung zu vereinen. Was durchauss Sinn macht. Objekte (Klassen) fassen die Daten und bestenfalls noch LowLevel-Methoden zusammen, Funktionen verarbeiten die Objekte in stringenter Art und Weise, ohne irgendwelche Nebenwirkungen. Das macht die ganze Geschichte natürlich auch sehr interessant für die (einfachere) Multithreading-Programmierung. Übrigens wird es nie wirklich eine 100%ige StateLess-Programmierung geben. Denn Software bildet die reale Welt ab, und diese ist nunmal statusbehaftet. Aber man kann das soweit wie möglich minimieren.

  • @entropy1088
    @entropy1088 2 ปีที่แล้ว +1

    Echt gutes Video! Deine Stimmlage und Sprachweise --> super

  • @chikken007
    @chikken007 4 ปีที่แล้ว +5

    Sehr gutes Video. Klar strukturiert und formuliert. Gute Einführung in die Grundkonzepte. Danke ;)

  • @Himmelskastelan
    @Himmelskastelan 3 ปีที่แล้ว +1

    Ja so ein Video über Rekursionen wäre schon echt nett.
    Das bereitet mir so einiges Kopfzerbrechen.

  • @greenstargaming4745
    @greenstargaming4745 3 ปีที่แล้ว +1

    Könnte stundelang einfach nur zuhören, toll erklärt :)

  • @pawel_guzewicz
    @pawel_guzewicz 4 ปีที่แล้ว +10

    Really cool stuff! I learnt function currying with Haskell. We used to call functions with missing parameters "unfed" functions.

  • @vizenzovin
    @vizenzovin 6 หลายเดือนก่อน

    beste Video über funktionale Programmierung

  • @zoepietrzak6108
    @zoepietrzak6108 7 หลายเดือนก่อน

    Haha mein Kopf raucht von den ganzen neuen Begriffen aber du hast das gut erklärt! Hab die Prinzipien zumindest weitgehend verstanden als komplette Anfängerin 😊

  • @timefc
    @timefc 4 ปีที่แล้ว +15

    Sehr interessant, finde du machst die Videos echt gut, vor allem weil du gerade erst angefangen hast! Hattest du Vorerfahrung?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +5

      Na, das freut mich doch! Ich hatte keine Vorerfahrung, bevor ich den Kanal gestartet hab. Musste erst mal lernen, Videos zu schneiden und gut in die Kamera zu sprechen. :)

    • @timefc
      @timefc 4 ปีที่แล้ว +4

      @@NiklasSteenfatt dafür sieht das schon ganz schön professionell aus... Könntest auch schon 5kanäle davor gehabt haben hahaba

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +4

      @@timefc Haha, das ist ja schön! Wie die Videos dann wohl 5 Kanäle später aussehen ...

  • @lukasschmitt3075
    @lukasschmitt3075 3 ปีที่แล้ว +1

    Sehr schönes Video. Schreibe zur Zeit meine Seminararbeit über F# und Multiparadigmensprachen und auch wenn ich die hier angesprochenen Themen bereits kannte war es doch schön sie nochmal zu hören.
    Hier meine Lösung in F#, wobei das mit der curry funktion irgendwie komisch aussieht - hab ich da was verpasst oder liegt das einfach daran das F# ja bereits eine functional-first programming language ist?
    let anzahlgerade li =
    li |> List.filter (fun x -> x%2 = 0) |> List.fold (fun s x -> s + 1) 0
    let meinFilter predicate list =
    list |> List.fold (fun s x -> if predicate x then s @ [x] else s ) []
    let curry func para =
    func para

  • @bensteyn8420
    @bensteyn8420 ปีที่แล้ว

    5 Kochmützen ... von jemdandem, der im MINT-Studium in den 80/90igern in Pacal/ Turboascal programmiert hat!!!
    Objektorientierte Programierung! Damals der Speicherknappheit vs Adressraum geschuldet.
    Overlay Programmierung, weil nicht alles in den Hauptspeicher gepaßt hat.
    Oh Mann, haben wir uns gequält ....
    Freut mich sehr, daß jemand auf solch nette Weise dbzgl. hier auftritt.
    Vielleicht sollte ich wieder anfangen ....

    • @WCiossek
      @WCiossek ปีที่แล้ว

      Das hatten wir den sehr beschränkten Bill Gates zu verdanken, der immer sehr kleinlich gedacht hatte. Ich denke nur an das Extended Memory, wobei ein kleines Häppchen (64k) davon eingeblendet werden konnte, weil das msdos etwas anderes nicht zulies. So schaufelten wir mühsam im Speicherraum umher, um an den bereits vorhandenen Speicherplatz von ein Megabyte zu kommen. Mit Windows schmissen die Bill-Gates-Enthusiasten ihr Geld wirklich zum Windows hinaus und wer damit programmierte, hatte selbst schuld, wenn eine Pleitewelle dadurch verursacht wurde. Dank Linux wurde diese Speicherschinderei endlich aufgehoben.

  • @SkrtlIl
    @SkrtlIl 3 ปีที่แล้ว

    Erstmal tolles Video! Ich habe mich über den Wikipedia Artikel hinaus noch nicht mit funktionaler Programmierung beschäftigt benutze sie aber mit Python wie ich jetzt gelernt habe sehr oft :D. Ich wollte mal fragen ob du 10-Finger tippst, da es im Video so aussiehst als ob du dich, wenn du zu Sonderzeichen wechselst, oft kurz mit einem Blick auf das Keyboard umorientierst. Ich selbst benutze eine selbstgelernte, leicht merkwürdige Hybridform und ertappe mich auch oft dabei ab und zu auf meine Finger zu schauen wenn ich etwa von der Tilde zu Zahlen wechsel oder ähnliches.

  • @ivanbal
    @ivanbal ปีที่แล้ว

    Eines Deiner besten Videos Niklas!

  • @niklas4389
    @niklas4389 4 ปีที่แล้ว +1

    Deine Laufbahn ist echt beeindruckend. Respekt.
    Mal eine Frage.
    Ich habe diesen Monat meine Ausbildung zum Fachinformatiker für Systemintegration angefangen. Welche Programmiersprache sollte ich dafür lernen? Ist zwar Nebenbestandteil aber brauch man trotzdem. Phyton oder?
    Was sollte ich sonst noch lernen? Rund um Dinge wie Datenbanken und Netzwerkadministration.
    Wie sieht es mit Zertifizierungen aus? Gibt es da online "Schulen" die Zertifizierungen anbieten? Kenne nur die LPI. Würde aber gerne auch in Richtung Windows gehen, welche Dinge wären da sinnvoll?
    Vielen Dank schonmal!

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +3

      Hey! Erst mal Glückwunsch zum Start in die Ausbildung!!
      Python ist in der Tat die perfekte Allround-Programmiersprache, damit kannst du nichts falsch machen. In der Systemintegration ist bestimmt shell scripting noch ziemlich wichtig. Da würde ich mich auf jeden Fall mal intensiv mit Programmierung in bash (für Linux) bzw. PowerShell (für Windows) auseinandersetzen. Lass Linux übrigens auf keinen Fall außen vor, selbst wenn du eher in die Windows-Richtung gehen willst.
      Grundlagen von Datenbanken sind sicher hilfreich (SQL vs noSQL-Datenbanken, heutzutage vor allem auch verteilte Datenbanken, Hadoop, Presto, Spark, ...). Bei Netzwerk würde ich vor allem erst mal an den Grundlagen arbeiten. Wie funktionieren IP, HTTP, TCP, UDP, DNS, was sind Proxies, wie genau arbeitet ein Router, usw ...
      Ich kenne mich nicht sonderlich mit Zertifizierungen aus. Im Zweifel würde ich denken, dass es am wichtigsten ist, die Themen gut zu beherrschen. Coursera hat aber gute Online-Kurse, zu denen man oft ein Abschlusszertifikat erwerben kann, das kannst du dann in den Lebenslauf packen. www.coursera.org/learn/windows-server-management-security sieht doch z.B. ganz nett aus.
      Viel Erfolg!

    • @MarkusBurrer
      @MarkusBurrer 3 ปีที่แล้ว

      Eine Sprache, die ich dir ans Herz legen würde ist Rust. Der Compiler zwingt dich mehr oder weniger zu einem sauberen Programmierstil und der Compiler hilft dir auch mit guten Fehlermeldungen. Rust in Kombination mit funktionaler Programmierung und du bist für andere Sprachen gut gerüstet.
      Ich gebe zu, dass die Lernkurve ziemlich steil ist, aber ich bin der Meinung, mit Sprachen wie Python oder Java gewöhnt man sich schlechten Programmierstil an.
      Eine andere Sprache, die ich empfehlen würde, ist Elm. Vollständig funktional und mit hilfreichem Compiler.

    • @MarkusBurrer
      @MarkusBurrer 3 ปีที่แล้ว

      Achso, generell möchte ich dir empfehlen, funktionale Programmierung zu lernen, egal welche Sprache du lernst. Das geht auch mit Python, aber weil Python sowas wie immutable variables kennt kommt man leicht in die Versuchung, das Mal zu vergessen.
      Funktionale Programmierung ist deshalb sinnvoll, weil dadurch viele Fehler vermieden werden. Wenn man das Konzept einmal drauf hat kann man immer noch mit OOP oder imperativer Programmierung ergänzen.
      Ich wünschte, ich hätte das vor 20 Jahren gewusst.

    • @thisismyalias
      @thisismyalias 3 ปีที่แล้ว

      @@MarkusBurrer +1 für Rust

    • @MarkusBurrer
      @MarkusBurrer 3 ปีที่แล้ว

      @@thisismyalias es gibt eine Reihe von Sprachen, die ich Python inzwischen vorziehen würde. Ein direkter Ersatz wäre für mich Julia oder F#. Mit F# und VScode kann man etwas ähnliches machen wie mit dem Jupyter Notebook.
      Aber auch wenn man Smartphone Apps mit Kotlin oder Swift programmieren möchte sollte man das Konzept der funktionalen Programmierung zumindest kennen.
      Deshalb halte ich Python immer weniger für die ideale Einsteigersprache, die sie einmal war. Ich würde mittlerweile Elm empfehlen, auch wenn sie "nur" für die Web Entwicklung gedacht ist.

  • @fabiqn269
    @fabiqn269 4 ปีที่แล้ว +4

    Wie hast du programmieren gelernt/wie hast du angefangen? Mich interessiert das Programmieren sehr, aber ich weiß nicht wie und wo ich starten soll.

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +8

      Hey Fabi! Das ist eine sehr gute Frage. Persönlich hab ich ein bisschen was im Informatikunterricht an der Schule gelernt, das Wesentliche aber dann erst im Informatikstudium.
      Man kann aber natürlich auch ohne Schule oder Studium programmieren lernen, zum Beispiel mit einem Buch, mit TH-cam-Videos, Websites, ...
      Ich glaube, es ist wichtig, sich ein kleines Projekt als Ziel vorzunehmen, damit man nicht einfach nur stumpf irgendwelche Konzepte lernt. Zum Beispiel ein kleines Spiel zu programmieren oder so.
      Ich kann gerne mal ein Video mit etwas ausführlicheren Tipps zum Programmierstart machen!

    • @fabiqn269
      @fabiqn269 4 ปีที่แล้ว +2

      Niklas Steenfatt vielen Dank für deine Antwort, und ja ein Video wäre super 🙏🏼

    • @jeanpierremayer7557
      @jeanpierremayer7557 4 ปีที่แล้ว

      @@NiklasSteenfatt Bitte über ein kleines Spiel :)

  • @lucarudloff687
    @lucarudloff687 3 ปีที่แล้ว +2

    Welches Editoren-Programm nutzt du da am Anfang als du erklärst?😅 Bin noch komplett neu im Bereich Programmieren und komplett verwirrt irgendwie...

  • @the_master_of_cramp
    @the_master_of_cramp 3 ปีที่แล้ว

    Sehr interessantes Video. Niklas, dein etwas prominenter Unterkiefer sieht ein wenig aus wie meiner und ich hab Dysgnathie; ich finde es sieht bei dir auch ein wenig so aus als wäre der Unterkiefer im Vergleich zum Oberkiefer zu weit vorne, nur als Tipp. Vielleicht solltest du es mal bei einem Kieferorthopäden überprüfen lassen ob die Kiefern richtig aufeinander stehen, weil sonst kann es später zu frühem Zahnverlust und fortschreitender Asymmetrie etc. durch Fehlbelastung kommen.

  • @luccasangpur6527
    @luccasangpur6527 4 ปีที่แล้ว

    Cooles Video! Zum ersten mal verstehe ich was Map und Reduce so machen.
    Mir haben deine Aufgaben sehr gefallen. Die meisten Schwierigkeiten hatte ich aber mit der gewöhnungsbedürftigen Syntax von Python.
    In Typscript ist es auch so dass man nicht gezwungen wird die Typen seiner Parameter und Return-Werte zu definieren, es aber der Lesbarkeit wahnsinnig hilft.
    Mich würde interessieren ob ich dabei alles richtig gemacht habe.
    Viel Erfolg auf TH-cam.
    **Spoiler**
    def anzahl_gerade( xs : list ) -> int :
    return reduce(lambda a, b: a+1, [ x for x in xs if x % 2 == 0 ], 0)
    def curry( func : Callable , x ) -> Callable :
    return lambda *args : func( x , *args )
    def mein_filter( func : Callable[ [ int , int ] , bool ] , xs : list ) -> list :
    return reduce( lambda a , b : a + [ b ] if func( b ) else a , xs , [ ] )

  • @TheCookieLPT
    @TheCookieLPT 4 ปีที่แล้ว +6

    Spoiler (evtl. Lösungen zu den Übungsaufgaben):
    Falls jemand Erfahrung mit Python hat (hab ich leider nicht): Bei mein_curry und mein_filter würde mich interessieren, welche Datentypen die Parameter haben sollen denn ich habe keine dazugeschrieben. Außerdem bräuchte mein_curry wahrscheinlich noch einen Rückgabewert, aber ich bin mir nicht sicher, welchen. Es funktioniert zwar, aber ganz sauber glaube ich ist das nicht, wenn ich die Datentypen auslasse.
    Außerdem habe ich die Einschränkungen nicht eingehalten wie im Video erwähnt, ich hätte das Video zuerst zu Ende schauen sollen.
    def anzahl_gerade(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    # Für die Curry Funktion
    def summe(x: int, y: int, z: int) -> int:
    return x + y + z
    def mein_curry(func, val):
    return lambda x, y: func(val, x, y)
    def mein_filter(y, xs: list) -> list:
    return [x for x in xs if y(x)]

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +4

      Typisierung ist bei größeren Softwareprojekten echt wichtig. Bei kleineren Python scripts wird es oft weggelassen. Im Video schreibe ich die Typen hauptsächlich für die bessere Verständlichkeit dazu. Für Funktionen kannst du Callable nehmen, wie ich es auch im Video gemacht habe. Für ein beliebiges Argument geht z.B. Any.

  • @SirLasterOfDesaster
    @SirLasterOfDesaster 4 ปีที่แล้ว

    Hi Niklas,
    hab dein Video gerade erst endeckt :D Super Erklärung!
    Zu dem funktionalen habe ich aber noch Fragen:
    Am Anfang sagst du ja, dass der Funktionale Ansatz NICHT von Zuständen abhängt. Wenn ich jetzt aber (als Beispile) eine Funktion bauen will, was mir mit Eingabe von Kundennummer die Brief Anrede+Name (Sehr geehrter Herr/Sehr geehre Frau) zusammenhängen soll, dann bekommt meine Funktion als Input wie gesagt die Kundennummer und liest aus der Kunden DB die Anrede (Herr/Frau) und Name aus. Und anhand des Status (ob Frau oder Mann) muss entweder "geehrter" oder "geehrte" verwendet werden => ist als Statusabhängig. Wie würde man so ein Beispiel in funktional implementieren?
    Danke schon mal und Lg

  • @reaper6558
    @reaper6558 3 ปีที่แล้ว

    Danke für das Video, so konnte ich gut lernen, wie das ganze in Python funktioniert. Hab das ganze mal auch in Python programmiert inklusive reduce bei der letzten Funktion:
    import functools
    def my_equal(xs: list) -> int:
    return functools.reduce(lambda x1, x2: x1 + 1 , filter( lambda x: x % 2 == 0, xs), 0)
    def list_equal(xs: list) -> list:
    return len([x for x in xs if x % 2 == 0])
    def test(x: int, y: int, z: int) -> int:
    return x + y + z
    def curry(fun, *args):
    return lambda *inner: fun(*args, *inner)
    def my_filter(fun, xs: list) -> list:
    return list(functools.reduce(lambda acc, x2: acc + [x2] if fun(x2) else acc , xs, []))

  • @okdoomer620
    @okdoomer620 4 ปีที่แล้ว +1

    Gutes video. Dass None einfach nichts ist, kann aber zu Missverständen führen, und da du ja überall schon Typannotationen hingemacht hast, würde ich eher den Standpunkt vertreten, dass es eine Art Unit-Type ist, also ein Datentyp mit nur einem Wert, nämlich None. Damit lassen sich zwar keine Informationen transportieren, aber man kann ja den None-Wert trotzdem instanziieren, Listen erzeugen, die unterschiedlich viele Nones enthalten und so weiter. Hier noch meine Lösungen zu den Aufgaben (nicht ausführlich getestet):
    def anzahl_gerade(l):
    return reduce(lambda x,_: 1 + x, filter(lambda x: x%2==0, l), 0)
    def mein_filter(f, l):
    return reduce(lambda x,y: x + [y] if f(y) else x, l, [])
    def curry(f, *args):
    return lambda *urgs: f(*args+urgs)

  • @danielhundhausen3187
    @danielhundhausen3187 4 ปีที่แล้ว +5

    Hammer Video und starke Erklärungen! Ich studiere Physik und kann auch ohne Info-Background gut folgen. Gruß aus Hamburg!
    Spoiler Alert!!
    .
    .
    .
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1,x2: x1+1, filter(lambda x: x%2 == 0, xs), 0)
    def curry(f: Callable, k: int) -> Callable:
    return lambda *args: f(k, *args)
    def mein_filter(f: Callable, xs: list) -> list:
    return [x for x in xs if f(x) is True]
    (Die dritte Lösung leider ohne reduce)

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +5

      Sehr cool! Und gute Lösungen! Um die dritte Aufgabe mit reduce zu lösen, muss man realisieren, dass reduce mit jeder beliebigen Funktion bzw. jedem Datentyp arbeiten kann, nicht nur mit Integer-Funktionen. Aber in der Praxis ist deine Lösung mit der List Comprehension ja sowieso besser!
      Ich habe viele Physikerfreunde und freue mich, dass die Videos auch dir als Nichtinformatiker einen Mehrwert bringen. Gruß aus London!

    • @clemens6440
      @clemens6440 4 ปีที่แล้ว +2

      Spoiler - Die dritte Aufgabe nochmal in Python und mithilfe von reduce:
      .
      .
      .
      def mein_filter(f: Callable, xs : list) -> list:
      return reduce( lambda a,b : a+[b] if f(b) else a, xs, [])
      Gruß aus Hamburg :)

  • @maestro4704
    @maestro4704 3 ปีที่แล้ว

    Das Video ist echt klasse! Danke für das teilen deines Wissens.

  • @cynocephalusw
    @cynocephalusw 3 ปีที่แล้ว

    Am interessantesten finde ich Idris. Durch das Konzept der Dependent Types stehen einem ungeahnte Möglichkeiten offen. Peter Caisse hat 2019 einen interessanten Aufsatz veröffentlicht: „The Power of Types“. Darin zeigt er, dass es nicht mehr notwendig ist, aufwendige Tests zu fahren, sondern dass der Typ selbst zur Demonstration der Fehlerlosigkeit ausreicht. Der Compiler kann einen sogar zur richtigen Implementierung führen.

  • @louispetrik7431
    @louispetrik7431 4 ปีที่แล้ว +5

    Großartig, weiter so!

  • @easypy
    @easypy 2 ปีที่แล้ว

    Wünsche mir gerne mehr von dir zum Thema Python :)

    • @tomdriver6733
      @tomdriver6733 ปีที่แล้ว

      Python ist leider eine sehr lahme Programmiersprache.

  • @kologitzi
    @kologitzi ปีที่แล้ว

    Sehr hilfreich, danke.

  • @flo_xd8702
    @flo_xd8702 4 ปีที่แล้ว +1

    Respekt ! das hat mir sehr geholfen ich danke dir für das mega Video ich hoffe du machst weiter so 👍

  • @davidak_de
    @davidak_de 3 ปีที่แล้ว +1

    Gut erklärt, danke für das Video!
    Hier meine Lösungen für die Aufgaben:
    from typing import Callable
    from functools import reduce
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: x1 + 1, filter(lambda x: x % 2 == 0, xs), 0)
    print(anzahl_gerade([4, 3, 6, 32, 2, 1, 23, 4]))
    def curry(f: Callable, x: int) -> Callable[[int, int], int]:
    return lambda y, z: f(x, y, z)
    def foo(x: int, y: int, z: int) -> int:
    return x + y + z
    bar = curry(foo, 5)
    print(bar(3, 2))
    def mein_filter(f: Callable, xs: list) -> list:
    return reduce(lambda x1, x2: x1 + [x2] if f(x2) else x1, xs, [])
    print(mein_filter(lambda x: x > 3, [1, 3, 2, 4, 5]))
    Wie ist deine Lösung?

    • @academicalisthenics
      @academicalisthenics 3 ปีที่แล้ว

      danke, die Aufgabe 3 hatte ich mit reduce nicht hinbekommen, deine Lösung hat mir sehr geholfen!

  • @cgsman1
    @cgsman1 3 ปีที่แล้ว +1

    Super gut erklärt ! Habe selten so eine durchdachte, übersichtsreiche Zusammenstellung von funktionalen Zusammenhängen so plastisch erklärt gefunden - vielen Dank ! Wäre auch eine optimale Herangehensweise für Informatik-Schüler*innen am Gymnasium !

    • @tommy40629
      @tommy40629 ปีที่แล้ว +1

      Habe selten so dumme Menschen gesehen, die an Dingen festhalten, die von der Mehrheit abgelehnt werden. Auch von Sprachwissenschaftlern. Sprich normal oder lass es sein‼

  • @anthonye2990
    @anthonye2990 3 ปีที่แล้ว

    Super Video. Ich würde mich über ein paar Büchertips freuen zum Thema.

  • @thorstenwidmer7275
    @thorstenwidmer7275 3 ปีที่แล้ว +1

    Sehr gut erklärt -> Lob

  • @khyroz9519
    @khyroz9519 4 ปีที่แล้ว +19

    Programmierst du immer im Light Mode?
    Davon bekomme ich immer sehr schnell Kopfschmerzen. 😂

  • @baris1513
    @baris1513 3 ปีที่แล้ว

    sehr interessant, ich bin nur leider noch nicht so weit in python. Aber hopefully bald dann komm ich hier nochmal her :)

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 ปีที่แล้ว +1

    Hast Du schon Mal mit Julia Lang programmiert?
    Da kannst Du sowas wie
    for f in (
    +,
    *,
    /,
    -,
    ^,
    function(a,b) a*b+b^a end
    )
    println(f(10,5))
    end
    machen.

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 ปีที่แล้ว +1

    julia> anzahl_gerade(xs) = iseven.(xs) |> count
    anzahl_gerade (generic function with 1 method)
    julia> anzahl_gerade(i for i in 1:10)
    5
    julia> curry(f, x) = (xs...) -> f(x, xs...)
    curry (generic function with 1 method)
    julia> curry(*, 5)(10)
    50
    julia> filter(>(3), [1,2,3,4])
    1-element Array{Int64,1}:
    4
    julia> filter(==(3), [1,2,3,4])
    1-element Array{Int64,1}:
    3
    julia> filter(iseven, [1,2,3,4])
    2-element Array{Int64,1}:
    2
    4

  • @WCiossek
    @WCiossek ปีที่แล้ว

    Ich habe eine Programmiersprache entwickelt, die funktional ist. Allerdings soll es damit auch möglich sein, ein Betriebssystem zu programmieren, wobei eine Speicherverwaltung nötig wird. Das lambda-Kalkül kennt keine arithmetischen Funktionen und keine Zahlen! Es beschreibt nur den Reduktionsvorgang eines Ausdrucks, was passiert, wenn ein Parameter in das Kalkül geschleust wird. Zur Erzeugung von Funktionen ist es unbrauchbar. Die lambda-Ausdrücke in einigen Programmiersprachen wie Python oder Haskell entsprechen nicht dem lambda-Kalkül, sondern sind Erweiterung derselben und müßten als my-Kalkül bezeichnet werden, wenn das lambda-Kalkül um Zahlen und Grundrechenarten erweitert wird. Eine Closure (Einschluß) ist im reinen lambda-Kalkül nicht möglich. Das my-Kalkül basiert auf dem lambda-Kalkül und entspricht dem lambda von Python und Haskell. Beim lambda-Kalkül werden Variablen durch Werte ersetzt. Beim my-Kalkül wird der Wert einer Variable verwendet und eine Ersetzung findet nicht statt. Nur unter diesen Voraussetzungen sind Closure möglich. Allerdings ist eine Zuweisung einer Variable mit einen Wert nicht pur funktional, da es ein Seiteneffekt ist. In funktionalen Programmiersprachen wie Haskell, die nicht rein funktional ist, wie oft behauptet wird, kennt Zuweisungen in Form von Konstanten, d.h. es ist nur eine einmalige Zuweisung möglich. Nun habe ich festgestellt, daß inpure Funktionen (Funktionen ohne Parameter oder Funktionen ohne Ergebnis) funktional verwendet werden können, sofern Seiteneffekte eingekapselt werden, durch Einführung eines weiteren Kalküls (ny-Kalkül), das inpure Funktionen aufnimmt und sich an das my-Kalkül orientiert, das wiederum das lambda-Kalkül zur Grundlage hat. Meine Programmiersprache basiert auf dem lambda-Kalkül und orientiert sich von der Syntax her an die Mengenalgebra. Der Befehlssatz ist in der Voreinstellung lateinisch und kann durch die synonymus-Anweisung in jede beliebige Sprache wie Englisch oder Chinesisch umgewandelt werden. Z.B. {synonymus synonymus:代名词} oder {synonymus scribere:{print, drucke, 打印}}, so daß
    die Anweisung {scribere "Hallo"} als auch {打印 "Hallo"} oder {print "Hallo"} auf der Konsole das Wort Hallo ausgibt. Um diesen Seiteneffekt funktional einzukapseln, muß es das ny-Kalkül verwenden:
    {{ny {x} {scribere x}} "Hallo"}
    daß die inpure Anweisung scribere in eine funktionale Umgebung packt. Analog für funktionale Anweisungen gibt es das my-Kalkül für pure Operatoren z.B.
    {{my {x} {+ x,4}} 3}
    was das Ergebnis 7 liefert. Da die Grundrechenarten eh schon pure Funktionen sind, genügt
    {+ 3,4}

  • @VISION-IT
    @VISION-IT 2 ปีที่แล้ว

    Wie lange braucht man u. was muss man tun - um auf das bzw. dein Programmierlevel zu kommen ?
    Ohne Camebridge, Elite Uni u. Co., ist das machbar ... ?

  • @TheKeule33
    @TheKeule33 3 ปีที่แล้ว

    Du erklärst gut.

  • @TheTimboo16
    @TheTimboo16 3 ปีที่แล้ว

    Super Video! Könntest du noch ein Video speziell zu Funktoren und Monaden machen bitte?

  • @simxschl
    @simxschl 4 ปีที่แล้ว +5

    um zu lernen, wie man funktional programmiert, gibt es 2 Methoden ... gewieft ;)

  • @luigi.8868
    @luigi.8868 2 ปีที่แล้ว

    Hi, mich würde interessieren, wenn das Gegenteil zur funktionalen, die imperative ist, wo ordnet man dann deklarativ und prozedural ein?

  • @xentox5016
    @xentox5016 3 ปีที่แล้ว

    Meega gut erklärt, danke!

  • @markuswagner7816
    @markuswagner7816 3 ปีที่แล้ว

    Richtiger guter Content!!

  • @christiandietz7480
    @christiandietz7480 2 ปีที่แล้ว

    geiles Video...weiter so!

  • @YouKnowWhoIAm118
    @YouKnowWhoIAm118 2 ปีที่แล้ว +1

    Bitte mal wieder irgendein Video zu Informatik. Ich würde zum Beispiel Typisierung interessant finden

  • @mag8101
    @mag8101 3 ปีที่แล้ว

    Mega Video! Danke :)

  • @MarkusBurrer
    @MarkusBurrer 4 ปีที่แล้ว +1

    OOP verliert allerdings immer mehr an Bedeutung weil immer mehr Programmierer merken, dass es eigentlich ziemlicher Käse ist. Speziell Spiele haben mit OOP ein echtes Problem.
    Ich dachte am Anfang auch "boah toll, alles irgendwie logisch", bin aber schnell auf die typischen Probleme gestoßen (zB Diamond Problem).
    Seit einer Weile lerne ich Rust. Insbesondere interessant für den Embedded Bereich

    • @Erik_Fa
      @Erik_Fa 3 ปีที่แล้ว +1

      Ich denke nicht das OOP an Bedeutung verliert. Andere Paradigmen gewinnen nur mehr an Bedeutung, weil sie bestimmte Probleme besser lösen können als die OOP.

    • @valentin6824
      @valentin6824 2 ปีที่แล้ว

      Also ich stimme dir zwar eigentlich zu, bin aber nicht der Ansicht dass sich die 2 Paradigmen gegenseitig ausschließen...
      Generell hast du aber Recht, in quasi jedem Unternehmen was den Anspruch an sich hat, "qualitativ hochwertigen Code" zu schreiben, wird funktional programmiert.
      Trotzdem sollte man nicht vergessen, man kann auch mit funktionaler Programmierung Code schreiben den keiner mehr lesen / verstehen kann...
      Ich finde sogar dass man "schlechten" Code welcher objektorientiert ist sogar besser lesen kann.

    • @WCiossek
      @WCiossek ปีที่แล้ว

      OOP ist im Prinzip nur eine Bündelung von Funktionen, und entspricht einer Funktionsbibliothek, sofern Variablen und Konstanten innerhalb des Bündels nicht zugreifbar d. h. privat sind. Eine Klasse beschreibt dieses Bündel und faßt Funktionen zu einer Kategorie zusammen. Da die Funktionen (auch Methoden oder Nachrichten genannt, wobei die Bezeichnungen wie Schall und Rauch sind) im mathematischen Sinne pur sein können, wird OOP bezüglich dieser Methoden funktional. Nur wird das funktionale Paradigma nicht wie bei Haskell erzwungen.
      Funktionale Programmierung ist bei einer Betriebssystementwicklung wieder hinderlich, da Speicherverwaltungen (Nebeneffekte) und Zustände hier von Bedeutung und auch erforderlich sind. Z.B Fehlerzustand, Wartezustand und Ausführungszustand bei den Prozessen usw..

    • @MarkusBurrer
      @MarkusBurrer ปีที่แล้ว

      @@WCiossek OOP wie es heute meistens gelehrt wird hat wenig mit dem zu tun, wie es ursprünglich gedacht war. Wer sich echtes OOP anschauen will muss Smalltalk lernen.
      Das Haskell in der Systemprogrammierung nichts verloren hat ist klar. Aber da kommt jetzt halt Rust ins Spiel und viele der Ideen in Rust haben einen funktionalen Ursprung, auch der Borrow Checker.
      Rust ist zwar eine imperative Sprache, aber es gibt wie gesagt viel Einfluss aus der funktionalen Programmierung und es wurde einiges an OOP Ballast weggelassen.
      Rust ist IMHO ein gutes Beispiel, wohin der Trend bei den Programmiersprachen geht
      Ach ja, wenn man sich die Stackoverflow Umfrage nach den beliebtesten Programmiersprachen anschaut fällt auf, dass die ersten vier oder fünf mehr oder weniger funktionale Sprachen sind

  • @toasti2211
    @toasti2211 2 ปีที่แล้ว

    Toll Toll, Dankeschön

  • @Cutrexxx
    @Cutrexxx 2 ปีที่แล้ว

    spoiler für erste Aufgabe mit reduce:
    reduce(lambda a,b: a+1 if b%2==0 else a, numbers, 0)

  • @NeuroEverything
    @NeuroEverything 4 ปีที่แล้ว +17

    I think for the first time in my life I wish I understood German

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +2

      Haha, I know, it's a shame for all my English-speaking friends! As Oscar Wilde said, life is too short to learn German, so I'm going to make content in English some day, promise.

    • @fentonmsu
      @fentonmsu 3 ปีที่แล้ว

      Deutsch ist sehr einfach zu lernen.

    • @fentonmsu
      @fentonmsu 3 ปีที่แล้ว

      Ich mache Videos auf Deutsch, Russisch sehr schwerer.

  • @adrianf.5847
    @adrianf.5847 3 ปีที่แล้ว

    Jetzt mal ne blöde Frage: Sie haben ja in 8:34 die Funktion multipliziere_liste implementiert. Diese hat an sich aber doch keine Seiteneffekte und ist von daher selbst auch funktional, oder? Denn die Variable "ausgabe" ist ja auch an den Scopus von der Funktion gebunden, und wird also nach Beendigung der Funktion aufgelöst.

    • @adrianf.5847
      @adrianf.5847 3 ปีที่แล้ว

      Also Wikipedia verwendet den Begriff "funktionale Programmierung" eher für das Programmierparadigma, wo Funktionen als Variablen benutzt werden dürfen, wohingegen die Verkapselung von Methoden wie im Video beschrieben eher unter "prozedurales Programmieren" eingeordnet wird.

  • @mephistosson
    @mephistosson 2 ปีที่แล้ว

    Vielen Dank!

  • @dominikscheuer7010
    @dominikscheuer7010 3 ปีที่แล้ว

    SPOILER!
    def anzahl_gerade(xs: list) -> int:
    return (sum(x % 2 == 0 for x in xs if True))
    def foo(x: int,y:int,z:int) -> int:
    return x * y + z
    def curry(f : function,z: int) -> int:
    return lambda x,y: f(x,y,z)
    def mein_filter(x ,xs: list) -> list[int]:
    return list(filter(x,xs))
    #oder soll es als Ersatz für filter benutzbar sein? xD

  • @MinecraftWikiDE
    @MinecraftWikiDE 4 ปีที่แล้ว

    Eine Prozedur, Funktion oder Methode unterscheidet sich sehr wohl voneinander und sie drei haben folgende Bedeutung:
    Prozedur: Hat keinen Rückgabewert.
    Funktion: Hat einen Rückgabewert.
    Methode: Ist eine Prozedur oder Funktion innerhalb eines Objektes.
    Mich hat es es ehrlich gesagt etwas gewundert, wieso das nicht aufgeklärt wurde, da das doch ein nicht zu vernachlässigender Unterschied ist!
    Trotz dieser Richtigstellung muss ich auch ein Lob aussprechen, die Qualität, dieses und aller anderen bisher geschauten Videos von dir, ist sehr hoch! Man lernt bei jedem einzelnen Video immer sehr viel tiefgründiges.

    • @ratzepalltuff9617
      @ratzepalltuff9617 4 ปีที่แล้ว

      nur aus Interesse:
      gelten static methoden dann nicht als methoden, da sie ja innerhalb einer klasse, aber nicht innerhalb eines Objekts sind?

    • @MinecraftWikiDE
      @MinecraftWikiDE 4 ปีที่แล้ว

      @@ratzepalltuff9617 Meines Wissens nach ist ein static für genau den Fall gedacht, damit man wieder von Prozeduren und Funktionen sprechen kann.

    • @WCiossek
      @WCiossek ปีที่แล้ว

      Strukturell gesehen ist eine Methode oder auch Nachricht genannt eine Funktion oder Prozedur und somit existiert kein Unterschied! Eine Funktionsbibliothek ist ein Bündel von Funktionen und Prozeduren. Das Gleiche tut eine Klasse unter einen kategorischen Namen, woraus sich Instanzen oder Objekte bilden lassen. In einer Funktionsbibliothek werden ja aus Funktionen oder Prozeduren plötzlich auch nicht Methoden oder Nachrichten! Funktionsbibliotheken und Objekte sind nichts weiteres als Funktionsbündel von zugreifbaren Funktionen! Aus struktureller Sicht sind diese Bezeichnungen wie Schall und Rauch, ähnlich den Variablen im lambda-Kalkül, wobei lambda x.x identisch ist mit lambda y.y.

  • @orca9469
    @orca9469 3 ปีที่แล้ว

    Kannst du vielleicht dann auch mal ein Video über C#, C, C++ etc machen (objektorientierte Programmierung)

    • @tomdriver6733
      @tomdriver6733 ปีที่แล้ว

      Das würde mich auch interessierren.

  • @conrade.4110
    @conrade.4110 3 ปีที่แล้ว

    Hi Niklas, danke für das tolle Video. Könntest du Mal was machen, dass im Video das Tastatur tippen nicht so laut ist? Dann wäre wirklich perfekt.

  • @daniels.6534
    @daniels.6534 4 ปีที่แล้ว +2

    Nach PEP8 ist anzahl_gerade() zwar kein Einzeiler, aber was solls :D
    SPOILER
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: 1 + x1, filter(lambda x: x % 2 == 0, xs), 0)
    def curry(func: Callable[[int], int], k: int):
    return lambda x1, x2: func(k, x1, x2)
    def mein_filter(func: Callable[[int], int], xs: list):
    return list(reduce(lambda x1, x2: x1 + [x2] * func(x2), xs, []))

    • @valentindoring5105
      @valentindoring5105 3 ปีที่แล้ว

      Wow, die mein_filter Funktion hat es in sich

    • @MoneyPink
      @MoneyPink 3 ปีที่แล้ว

      Die list ganz hinten kann sogar raus, reduce übergibt list :)

  • @S.Quandt_Filme
    @S.Quandt_Filme 3 ปีที่แล้ว

    Funktioniert das bei Lua scripts auch so ähnlich ?

  • @davidak_de
    @davidak_de 3 ปีที่แล้ว

    Könntest du ein Video zu Racket machen?

  • @metox3388
    @metox3388 3 ปีที่แล้ว

    Gibt es die Beispiele auch als C?

  • @jenniferclock9384
    @jenniferclock9384 3 ปีที่แล้ว

    nice. ich wollte bssl lernen was eine funktionale sprache ist, da ich mir clojure aneignen will. Danke!

  • @MrKeKsst
    @MrKeKsst 2 ปีที่แล้ว

    Ich würde sowas in einer besser lesbaren Sprache bevorzugen in der Zukunft, Python ist zwar simpel, aber oft zu simpel und reduziert im gut lesbar zu sein, Go hat das viel besser gelöst.

  • @mymacaintwag
    @mymacaintwag 4 ปีที่แล้ว +3

    Irgendwie hat sich mein letztes Kommentar verflüchtigt:
    1. “Methoden” werden meist im kontext von Klassen benutzt
    2. Es gibt in Python keine Pointer
    3. Funktional in python ist wegen nicht vorhandener tail call optimization nicht wirklich optimal
    4. Eine while Schleife ist sicherlich konzeptuell kein “Äquivalent” für map.

  • @vine2875
    @vine2875 4 ปีที่แล้ว

    An welcher Uni (in Hamburg) hast du studiert oder hast du garnicht in Hamburg studiert?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +1

      Uni Hamburg

    • @vine2875
      @vine2875 4 ปีที่แล้ว

      @@NiklasSteenfatt da will ich ab nächstes Jahr auch studieren kannst du diese vom Ruf und dem Studium an sich empfehlen? (Ich frage weil sie in keinem Ranking vorkommt oder dort nirgendwo besonders abschneidet) PS: Vielen Dank für deine tollen Videos😊

  • @Anon48657
    @Anon48657 4 ปีที่แล้ว

    Weiter so!

  • @ZuvielDrama
    @ZuvielDrama 4 ปีที่แล้ว +1

    Funktionale Programmierung ist nah am Low Level während Objekt Orientierte Programmierung die Kapselung dessen ist was benötigt wird um eine flüssige Abstraktion mittels generischen Templates in C++ zu erreichen. In anderen Worten mit Funktionaler Programmierung schreibe ich mir mein Verhalten, dass ich bei Bedarf ganz schnell mutiere um mir meine Abstraktionsschicht auf der OOP Ebene. So dass ich mittels K.I. irgendwann den Funktionalen Bereich dynamisch anpasse und die abstraktion erstmal generisch lasse um trotz evolutionärer Annäherung durch nicht deterministische Intelligente Algorithmen trotzdem ein garantiertes Maß an Ergebnissicherheit zu erhalten.

    • @rolandm.2276
      @rolandm.2276 4 ปีที่แล้ว

      Nope.. Schon das Statement im ersten Satz ist komplett falsch.. FP ist auf Top Level abstrahiert.. Konzepte wie map (Funktoren) flatMap (Monaden) bzw filter und reduce (Katamorphismen) kommen aus der Kategorietheorie.. Du kannst diese höheren Funktionen in jeder Sprache gleich nutzen, wie sie dann Low Lvl implementiert sind, ist dann meist egal.. wenn das Ganze ein Low Lvl wäre, dann würden wir diese Konzepte von einer Sprache in die nächste kaum portieren können. 🤔

  • @denisg1208
    @denisg1208 4 ปีที่แล้ว

    Welche Tastatur benutzt du?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +2

      Eine Razer BlackWidow Ultimate, die mir seit 2014 treue Dienste leistet!

    • @TottiBln
      @TottiBln 3 ปีที่แล้ว

      Ist das wirklich dein Problem: "Welche Tastatur..." ... das ist eine Tastatur, mit der man gut C++ und Python programmieren kann... aber nicht HTML und JavaScript ;)))

  • @timi-mc1xt
    @timi-mc1xt 4 ปีที่แล้ว

    Hi,
    mit welchem Tastaturlayout arbeitest du lieber, qwertz oder qwerty (aktuell benutzt du qwerty aber bist qwertz gewohnt :D sieht man bei 12:44)

    • @schlingelgen
      @schlingelgen 3 ปีที่แล้ว

      Und warum kann es nicht genau andersherum sein? 🤔

  • @religionOFnature
    @religionOFnature หลายเดือนก่อน

    Meine Projektidee wäre ein selbst ausgedachtes Brettspiel mit möglichst einfache Grafik zu programmieren.

  • @fakecrafter7448
    @fakecrafter7448 3 ปีที่แล้ว

    was für fonts sind das?

  • @LS-cb7lg
    @LS-cb7lg 3 ปีที่แล้ว

    def anzahl_gerade(lst: list) -> int:
    return reduce(lambda x, y: x+y, list(map(lambda x: 1 - x % 2, lst)), 0)
    def curry(fkt, x):
    return lambda y, z: fkt(x, y, z)
    def mein_filter(fkt, lst: list) -> list:
    return list(filter(fkt, lst))
    hab leider nicht geschafft, die anzahl_gerade funktion mit filter zu programmieren, wäre bestimmt sogar einfacher als meine lösung aber naja :D

  • @axelscheiber9499
    @axelscheiber9499 3 ปีที่แล้ว

    Meine Lösung für anzahl_gerade: allerdings ohne reduce(), ist mir leider nicht eingefallen =D:
    .
    .
    .
    .
    .
    .
    def anzahl_gerade(xs: list) -> list:
    return list(filter(lambda x: x/2==round(x/2), xs))
    Hat jemand die lösung?

    • @juliak5813
      @juliak5813 3 ปีที่แล้ว

      Ich habe eine ähnliche Lösung:
      def anzahl_gerade(ls: list):
      return len(list(filter(lambda x: x % 2 == 0, ls)))

  • @christianforler1476
    @christianforler1476 ปีที่แล้ว

    # SPOILER!
    def anzahl_gerade(xs : list) -> int:
    return reduce(lambda a,b : a+1 , filter(lambda x: x&1 == 0, xs) , 0)
    def curry(fn, x, *y):
    return lambda *y: fn(x, *y)
    def mein_filter(fn, xs):
    return list(reduce(lambda a, x: a + [x] if fn(x) else a , xs, []))

  • @KarlMarx.et.FriedrichEngels
    @KarlMarx.et.FriedrichEngels 3 ปีที่แล้ว +1

    Fast 50 k.
    ;)

  • @deadpoolgamer4824
    @deadpoolgamer4824 3 ปีที่แล้ว

    Ich glaube mein Kopf ist geplatzt 😎✌😅

  • @alicethegrinsecatz1611
    @alicethegrinsecatz1611 4 ปีที่แล้ว

    Heute klingst du ähnlich wie der TH-camr TheJoCraft

  • @clownjunge2942
    @clownjunge2942 2 ปีที่แล้ว

    Niklas arbeitet mit Windows :D

  • @fritzbauer5043
    @fritzbauer5043 3 ปีที่แล้ว

    Ich hätte Informatik studieren sollen :(((

  • @vast634
    @vast634 2 ปีที่แล้ว

    Da bleib ich lieber bei der klassischen Java Syntax, als diesem unübersichtlichen Lamda Quatsch.

    • @freduberlauf
      @freduberlauf 2 ปีที่แล้ว

      Java hat seit 2014 Lambdas.

  • @ZuvielDrama
    @ZuvielDrama 4 ปีที่แล้ว

    Ich war schon immer ein ganz schrecklicher programmierer.

    • @TottiBln
      @TottiBln 3 ปีที่แล้ว +1

      Nach diesem Video wir's auch nicht besser;)... Viele hier glauben, weil sie nach anschauen des Videos nur "Bahnhof" verstanden haben, dass es ein sooo hochwertiger Content ist, aber da ich selbst Kurse gebe, kann ich Dir sagen: lass Dich nicht entmutigen! Dieses Video ist für Anfänger nur verwirrend und ungeeignet Es dient in erster Linie der narzisstischen Befriedigung des Machers nach Klugscheisserei und Anerkennung!

  • @nameunknown3272
    @nameunknown3272 4 ปีที่แล้ว +2

    Viel zu viel auf einmal, wenn man dieses Video ohne Vorwissen schaut, versteht man gar nichts

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 ปีที่แล้ว +7

      Hey, danke für das wertvolle Feedback! Du hast recht, das Video ist eine Einführung in die funktionale Programmierung, aber man muss schon etwas programmieren können, um es zu verstehen. Die meisten meiner Zuschauer beschäftigen sich ja schon etwas mit Informatik. Aber ich kann gerne auch mal eine Einführung in die Programmierung machen, für absolute Anfänger! :)

    • @valentinn3507
      @valentinn3507 4 ปีที่แล้ว

      @@NiklasSteenfatt ja das wäre toll! Obwohl es da schon einige Videos auf YT gibt. Vielleicht mit eigenem Twist

  • @hgdesign3674
    @hgdesign3674 2 ปีที่แล้ว

    Sehr geiles Video!
    Habe mit dem Thema funktionale Programmierung noch nicht viel zu tun gehabt aber habe mich mal an der ersten Aufgabe versucht
    !!SPOILER!!
    def anzahl_grade(xs: list) -> list:
    return reduce(lambda x1, x2: x1 + x2/x2, list(filter ( lambda x: x % 2, xs)), 0)
    Feedback wäre echt klasse :)

  • @BUE687
    @BUE687 3 ปีที่แล้ว

    Da
    def anzahl_gerade(l):
    return reduce(lambda x, y: x + 1, filter(lambda x: x % 2 == 0, l), 0)
    def curry(f, x):
    return (lambda *args: f(x, *args))
    def mein_filter(f, l):
    return reduce(lambda x, y: x + [y] if f(y) else x, l, list())