Lambda? You Keep Using that Letter - Kevlin Henney

Поделиться
HTML-код
  • Опубликовано: 25 фев 2020
  • Lambdas. All the cool kid languages have them. But does 'lambda' mean what C#, Java, Python, C++, etc. mean by 'lambda'? Where did lambdas come from? What were they originally for? What is their relationship to data abstraction?
    In this session we will into the history, the syntax and the uses of lambdas and the way in which lambda constructs in various languages do (or do not) match the original construct introduced in lambda calculus.
    Check out more of our talks, courses, and conferences in the following links:
    ndcconferences.com/
    ndc-london.com/
  • НаукаНаука

Комментарии • 138

  • @Typhoonbladefist
    @Typhoonbladefist 4 года назад +247

    Kevlin Henney always has some of the most interesting talks about nothing.

    • @DeepDuh
      @DeepDuh 3 года назад +12

      the Seinfeld of tech talks

    • @Typhoonbladefist
      @Typhoonbladefist 3 года назад +1

      @Khalil Aydin no you didn’t. Shut up

    • @kafir1337
      @kafir1337 2 года назад +1

      @@DeepDuh lol

    • @arekkrolak6320
      @arekkrolak6320 2 года назад +5

      he is talking in an interesting way but doesn't really say anything - what does it mean when you turn off your computer your program is still running, we can all go home? :)

    • @JDogB-tc3lx
      @JDogB-tc3lx 2 месяца назад

      Exactly! Blah blah blah, get the hell on with it and please stop with your corny programming dad jokes

  • @Andrumen01
    @Andrumen01 2 года назад +29

    I loved the quote: "Physicists don't use namespaces", epic quote.

  • @crashmatrix
    @crashmatrix 4 года назад +35

    "Silence of the Lambdas", good grief that cracked me up.

  • @DavidGonzalezSamudio
    @DavidGonzalezSamudio 3 года назад +24

    In a way, Kevlin crafts the introduction, the motivating example, the background, and the related work for most PL research papers.

  • @goobah01
    @goobah01 4 года назад +44

    Nice explanation of Church Numerals. I remember a schoolteacher asking us ‘what is 2? Can you you explain it?’ Or words to that effect. At the age of 11 I was stumped. It would be some years before I entered Alonzo’s Church.

  • @movax20h
    @movax20h 4 года назад +22

    Everybody should read at least a part of "Structure and Interpretation of Computer Programs". It is enlightening. Or try learning Ocaml, or if you are a bit more brave Haskell (I don't like syntax too much). It is eye opening when you do it first time.

    • @allendupras
      @allendupras 4 года назад +3

      Or category theory! (that's the one I'm hooked on now) Anyhow the Curry-Howard-Lambek Isomorphism shows that all these things are the same!!

    • @matheusjahnke8643
      @matheusjahnke8643 3 года назад +2

      Haskell syntax is kind of nice.
      Saves you some parenthesis(looking at you, Lisp)
      But "Functor", "Monad", "fmap"?
      Just name it "Mappable", "Joinable", "map"(make this List-only function generic as "fmap" is).

    • @jamesmccabe2286
      @jamesmccabe2286 3 года назад

      I watch this 47 times a day

  • @Asdayasman
    @Asdayasman 4 года назад +48

    My man out here barefacedly using Comic Sans and Papyrus on his slides like they're not crimes against nature.

    • @anselmschueler
      @anselmschueler 4 года назад +4

      comic sans is the font that simon peyton jones uses in all his talks

    • @silvianaamethyst
      @silvianaamethyst 3 года назад +4

      Comic Sans is recognized as an accessible font for visually impaired persons. We should stop demonizing it.

    • @Asdayasman
      @Asdayasman 3 года назад +1

      @@silvianaamethyst Nah, we should put them out of their misery. Imagine not only being disabled, but having to look at comic sans to read anything. I'd rather be dead.

  • @Snickersnack329
    @Snickersnack329 4 года назад +19

    I'm not a fan of this talk, but working through the Structure and Interpretation of Computer Programs gets a big thumbs up! That book and course opened my mind in a way nothing else had.

  • @ModeratelyInsane
    @ModeratelyInsane 4 года назад +6

    "Moderately insane" hahaha i love this guy

  • @Respectable_Username
    @Respectable_Username 8 месяцев назад

    This talk makes me appreciate JavaScript (in the form of TypeScript of course, as a sane developer) even more. So many of these things are just built into the language that you bring up these concepts that sound big and complicated and then I go "ohhhh, it's just an arrow function" or "ohhhh it's just a JS object" and it simplifies a whole bunch. Even typing of lambdas is easy, because the type of an arrow function in TS is (type_of_first_param, type_of_second_param) => return_type. TS is really an underappreciated language as just a general programming language away from the web frontend!

  • @nickdrian510
    @nickdrian510 2 года назад +1

    A lecture on arbitrary semantics and controversial distinctions. Entertaining none the less.

  • @puellanivis
    @puellanivis 4 года назад +6

    Technically, in `square(x): x * x` all of the open bindings (free/unbound variables) are closed by the lexical environment, by virtue of being a vacuous statement. It might make sense to distinguish a wholly-self-contained closed expression, and one that incorporates various levels, but strictly speaking, I don’t see the value in limiting “closure” to cases where the enclosed lexical environment is empty.

  • @oliviermallet5460
    @oliviermallet5460 4 года назад +7

    The 1932 foundational article is accessible here www.jstor.org/stable/1968337

  • @isbestlizard
    @isbestlizard 3 года назад +4

    I think sometimes maybe nobody actually knows what closures or lambda is, like Taoism. If you actually did know what it is, you could describe it concretely and easily rather than giving definitions which mean nothing. People trying to define a closure would also define a tree as 'part of a forest' rather than 'big tall solid thing made out of wood and branches with leaves on'

  • @seanwarren9357
    @seanwarren9357 4 года назад +14

    Yeah, idk, my use of lambda comes in waves.

  • @MM-pi2sv
    @MM-pi2sv 3 года назад +1

    Fantastic origins talk! Turing gets a lot of buzz but it really does all go back to Church.

  • @axelBr1
    @axelBr1 4 года назад +10

    As an engineer who occasionally writes C++ to help me do my work, I have one question, "What are the actual benefits of lambda functions in actually getting something done?"

    • @user-cf1oo3pn3c
      @user-cf1oo3pn3c 4 года назад +6

      fwiw, for me, it made passing functors for use with std::thread and co. easier (to read) than using things like std::bind. actually, it made passing functors to anything that need them easier in general.

    • @deepbluev7.x813
      @deepbluev7.x813 4 года назад +17

      The most useful property of them is probably, that you can parameterize algorithms. Some examples:
      std::sort(myVey, [](auto a, auto b){ return a < b; });
      Here the parameterization is of course uninteresting, since std::sort by default uses operator 1000; });
      But you can also further parameterize that:
      auto someValues = filtered(myVev, [legalAge](const auto& value) { return value.age > legalAge; });
      So here the benefit is, that you don't need to implement arbitrary operators or write different filter functions. You can parameterize existing algorithms right there without defining something out of band. This makes code shorter, simpler, easier to read and maybe even faster.

    • @axelBr1
      @axelBr1 4 года назад

      @@user-cf1oo3pn3c Will look into that, if I ever have to use threads.

    • @axelBr1
      @axelBr1 4 года назад +2

      @@deepbluev7.x813 Thanks. I guess because I use C++ to do procedural data processing (probably incorrectly as use singletons to wrap up data and functionality into classes), I don't really use short functions, i.e. squaring a number. But will look out for opportunities to use them as you suggest.

    • @deepbluev7.x813
      @deepbluev7.x813 4 года назад +4

      @@axelBr1 They tend to be sneaky little ninjas. Once you used them a few times, you tend to find more and more places where you can use them. For example to initialize a const or static multimember struct.

  • @cmw3737
    @cmw3737 3 года назад +3

    29:45 I've been looking for this for a while, I knew I'd learnt about actors being equivalent to lambdas but forgotten where.

  • @stephenjames2951
    @stephenjames2951 4 года назад +8

    Very engaging presentation. I think I got about 1/2. But the history included was great.

    • @garryiglesias4074
      @garryiglesias4074 4 года назад +2

      If you want deeper understanding, watch MIT SICP lectures from Sussman and Abelson. It's long, but even the few first hours are litterally "Wizardry". The book in itself is a treasure (Structure and interpretation of computer programs, that's the blue book in the middle of those slides).

  • @lauzing4029
    @lauzing4029 4 года назад +3

    Related to the final part: David Beazley did the lamda implementation of logic and numbers etc. using Python in ruclips.net/video/pkCLMl0e_0k/видео.html

  • @edgeeffect
    @edgeeffect 6 дней назад

    I once wrote a completely LEGIBLE shopping-basket application in Perl.

  • @nextlifeonearth
    @nextlifeonearth Год назад +2

    43:28 you CAN in fact name the type of a lambda expression in C++, just not in the traditional C-way.
    ie: [] () -> float { return 1; } which returns a float with value 1. Even works with specific types where you implicitly call the constructor with an initializer list;
    [] () -> MyType { return {1, 2, "foo"; } would construct an instance of type MyType with parameters 1, 2 and "foo".

  • @edminchau811
    @edminchau811 4 года назад +6

    I have been thinking of looking at some functional programming languages like Haskell, and from the descriptions and talks it always seemed to me that the language was doing things in a very similar way to some of the spreadsheets I've cooked up in Open Office. And then I see this at 14:15, and yup.

  • @PaulPaulPaulson
    @PaulPaulPaulson 4 года назад +3

    Thumbs up from a former Smalltalk programmer for mentioning Alan Kay

  • @MrDiaxus
    @MrDiaxus 4 года назад +7

    Functional evidence that we cannot successfully define anything without redefining it ad absurdum... carry on.

  • @virkony
    @virkony 4 года назад +6

    (at 54:59 ) There is no reason to have 'false' = \a b -> b . You can swap them and nothing changes as long as rest of definitions are consistent (e.g. 'false' = \a b -> a, 'and' = \f g -> f f g, 'or' = \f g -> f g g).

    • @steffahn
      @steffahn 4 года назад +1

      I suppose he knows… really this “false=0”-explanation: it’s a joke.

    • @ms-qr4br
      @ms-qr4br 4 года назад +4

      there is no reason for anything to mean anything

    • @PaulPaulPaulson
      @PaulPaulPaulson 4 года назад

      54:54 As before with the _2 name for "apply twice", the names "true" and "false" are misleading here. What this actually is is ifTrue and ifFalse and it's called on a boolean value or expression.
      (x < 4) ifTrue: [x++]
      or in others:
      y := (x > 4) ifTrue: [x * 2] ifFalse:[x + 7]
      You wouldn't want to write
      (x < 4) true: [x * 2]
      That would be confusing af.

    • @virkony
      @virkony 4 года назад +1

      @@PaulPaulPaulson not sure I understand where that syntax coming from. I think you can imagine that Church encoding defines data in a structure that is useful in future operations on them. In particular:
      add = (a, b) => n => z => a(n)(b(n)(z))
      mul = (a, b) => n => z => a(b(n))(z)
      For booleans it is even easier to imagine since they explicitly represent branching:
      nonzero = a => a(_ => f => t => t)(f => t => f) // from natural to boolean (first argument corresponds to false)
      gt = (a, b) => nonzero(leftover(a, b))
      Thus after providing values of both branches to boolean you collapse it to one or another branch:
      y = x => gt(x, _4)(add(x, _7))(mul(x, _2))
      Full example: tinyurl.com/qv9u6k4

  • @sasukesarutobi3862
    @sasukesarutobi3862 2 года назад +2

    14:10 Microsoft have since included lambdas in Excel

  • @JohnDlugosz
    @JohnDlugosz 4 года назад +7

    11:30 re parenthesis, just to make things easier, like to see a compiler say "Yea, I understand that": You're describing Perl.

  • @Alex-dn7jq
    @Alex-dn7jq 4 года назад +1

    for the parenthesis thing, have a look at F#

  • @gustavcoetzee5018
    @gustavcoetzee5018 2 года назад

    Thank you

  • @otesunki
    @otesunki 4 года назад +2

    I watch this 47 times a day

  • @MortenSkaaning
    @MortenSkaaning 4 года назад +4

    When you don't add names to types and variables, the maintenance programmer will kill you after they had an allnighter of Unnamed doing Unnamed on Unnamed and passing it to Unnamed. You should not look to the Smurfs as your source of reliability.

    • @Trazhenko
      @Trazhenko 4 года назад +4

      So much this. I recently had to debug an issue in a class that was a giant pile of nested anonymous classes and functions, and it was very difficult to follow, even with the debugger. When it works, it's kind of cool and magical, but when it doesn't... well... it's hard to find the problems.

  • @stevenshrii
    @stevenshrii 2 года назад

    Answer = (condition < n) ? IfTrue : ifFalse;

  • @logiciananimal
    @logiciananimal 4 года назад +3

    The presenter missed some other weird notes: Currying, if named by origin, should be called "Schönfinkeling". (See his paper "On the building blocks of mathematical logic" reprinted and translated in _From Frege to Gödel_.) Also, as for true and false - in other work in the foundations of mathematics from the 1920s and 1930s, true "was" 1 and false "was" 2. (In the work of Gödel, for example, if I remember correctly.)

    • @piraka_mistika
      @piraka_mistika Год назад

      in my formal semantics class in college, we called it "Schönfinkelization"

    • @logiciananimal
      @logiciananimal Год назад

      @@piraka_mistika Neat - did you use a text that had that "right"? If so, which one?

    • @piraka_mistika
      @piraka_mistika Год назад

      @@logiciananimal I don’t think we used a textbook

  • @edgeeffect
    @edgeeffect 3 года назад

    Optional parens for function arguments... like to see a compiler deal with that..... hello Ruby.

  • @popularmisconception1
    @popularmisconception1 Год назад +1

    In fact the false being equal to zero really IS arbitrary and just a matter of convention and convenience. It depends on how you use it. You could switch the definition of truth and false, making true equivalent to zero, as long as all your if-then-else statements become if-else-then.

    • @mittelwelle_531_khz
      @mittelwelle_531_khz 11 месяцев назад

      It can actually make sense if you consider you may fail in many ways doing a thing but there's only one way to get it right. (Eg. returning "0" by convention from a C/C++ main program if everything went OK but a number unequal to "0" to indicate what failed).

  • @stighemmer
    @stighemmer 4 года назад +4

    Common Lisp may be a monster, but it is a very cuddly monster!

    • @crashmatrix
      @crashmatrix 4 года назад +2

      Embrace Lisp, and it will embrace you!

  • @daniilselivanov1251
    @daniilselivanov1251 3 года назад

    Impressive af!

  • @Cenitopius
    @Cenitopius Год назад

    Henney spends a minute talking about "Hiddenness" starting around 33:00 - can someone please explain what he's saying to me?

  • @MusashiHunter3
    @MusashiHunter3 11 месяцев назад

    40:09 [](){}() Silence of the Lambdas! Brilliant!

  • @NicholasPierce1030
    @NicholasPierce1030 4 года назад +7

    1:30 What about eigenvalues????

    • @ingframin
      @ingframin 4 года назад

      And probability distributions...

    • @tiborgrun6963
      @tiborgrun6963 4 года назад

      @@ingframin And Lebesgue measures?

    • @movax20h
      @movax20h 4 года назад +2

      Actually, eigenvalues and wavelengths from physics are one and the same. The problem of eigenvalues arrised from algebraic treatment of partial differential equations, most notably these of waves. The same later applied to Schrödinger's equation, which is equivalent to Hamiltonian approach to QM. Again, lambda. And in its original form there lambda was a energy of a state, which is directly and explicitly related to wavelength. That is why also we call "set of all eigenvalues" to be a "spectrum". Just like the light has spectrum. One and the same.

  • @edgeeffect
    @edgeeffect 3 года назад +1

    Programming with emoji.... you're getting dangerously close to APL!

  • @samferrer
    @samferrer 2 года назад

    Nice talk ... yet ... what is the definition of "problem"?

  • @GeorgeTsiros
    @GeorgeTsiros 3 года назад

    44:10 only reason it doesn't like that is it doesn't know the type of x. Use explicit typing and the compiler will accept it.
    Action nop = ()=>{};
    nop();

  • @michaeljuliano8839
    @michaeljuliano8839 3 года назад +2

    Silence of the Lambdas. XD I'm dead.

  • @djchrisi
    @djchrisi 4 года назад +5

    2:24 : excellent pronunciation Kevlin

    • @steffahn
      @steffahn 4 года назад +1

      Right, I couldn’t help but notice that, too-it’s somewhat rare to get these kind of spot-on pronunciations of German words from English‐speakers.
      His name is Kevlin though.....

    • @djchrisi
      @djchrisi 4 года назад

      Frank Steffahn corrected...

  • @feddeschaeffer7116
    @feddeschaeffer7116 4 года назад +6

    6:15 “[Functional programming] is so pure, that even if you unplug your computer, your functional programs will still run. Oh wait, that doesn't work. Yeah, they're riddled with side effects. All of this stuff is an illusion.”
    Every single function takes some amount of processing time as an input before it can decide on the appropriate output, but I've never seen a useful way to acknowledge that. At least not in the way in which we're more and more often starting to do when composing functions with other sorts of expected effects. Even Haskell includes ‘never returning’ as a valid output of any type of function. Is it ever possible to statically assert that the runtime of an algorithm stays within a certain ‘big O notation’ with regards to (some of) its inputs, or is that what the halting problem says no to?

    • @casperes0912
      @casperes0912 4 года назад +2

      Interesting question. I'm sure what you're describing here can be reduced to the Halting Problem, since there's no way of knowing if the execution time is just dependant on an extremely large constant. O(n) and O(n^n) could take an equally long time on the given input if the constants for the O(n) solution are large enough.
      But just like the Halting Problem itself this only applies when we look at things in a very general sense.
      For example, determining that the function
      int retX() {
      return 1;
      }
      halts isn't really very difficult at all.
      We can also very easily determine the time to execute this as being constant.
      We have something called formal verification tools. You can have a look at Dafny. And these tools allow you to set up some information about your code, and the verification tool will prove whether the facts about the code hold or not. And as per the halting problem this cannot be done in general. But a lot of the time we can do it on specific code, by reducing it to SAT solving and other problems that are possible, even if they are hard.
      Now I don't think these formal verification tools currently do O verification but similar techniques could definitely be applied to verify a function's O time or space complexity.
      I never get told about replies to RUclips comments, if you'd like to discuss this further, you can email me
      casperes1996@me.com
      I am having an exam on Computability and Logic on Saturday so I'm quite in the weeds of all of this at the moment ;)

  • @cr6925
    @cr6925 4 года назад +4

    A lot of words about - what ?

  • @ifireblade09
    @ifireblade09 4 года назад

    I feel asleep. was great. What would that lambda look like?

  • @TigerSpiderTube
    @TigerSpiderTube Год назад

    I'm now going to watch the cricket.

  • @DavidLindes
    @DavidLindes 4 года назад +5

    45:51 - "it's a big old mess" -- yeah, that's Java in a nutshell, right there. ;) ;)
    edit: 46:04 - "there's a lot of duplication here" -- oh yeah, that too. :)

  • @brandonbenson2055
    @brandonbenson2055 3 года назад +2

    So... In short computers are the expression of lambda using technology.

    • @tantalus_complex
      @tantalus_complex 3 года назад

      (Today's) computers are the expression of lambda where X is a transistor powered *on.*

  • @kenzmail5243
    @kenzmail5243 2 года назад

    Perl is executable line noise... Ha! I laughed.

  • @wagyourtai1
    @wagyourtai1 11 месяцев назад

    11.20 GROOVY

  • @maswinkels
    @maswinkels 3 года назад +4

    His jokes are clever. But his timing as a comedian is so terribly off that they all fall flat.
    Still a very interesting talk.

  • @joebowbeer
    @joebowbeer 8 месяцев назад

    25:18 Wizard Book

  • @ajar1000
    @ajar1000 4 года назад +1

    Awesome talk, but yellow text on a pink background using the font papyrus is cursed lol

  • @pigboiii
    @pigboiii 3 года назад

    So why did I decide to implement those lambda numbers in Kotlin again? Jesus christ what a mind fuck. Got it to work though I guess...

  • @kahnfatman
    @kahnfatman 2 года назад

    "It turns out" is a Kevlin Henney phrase.

    • @cruz1ale
      @cruz1ale 2 года назад

      In a talk about functional programming, he should really say "turning out is applied to it", instead

  • @einfacherkerl3279
    @einfacherkerl3279 4 года назад +6

    in every presentation, He has the same thing to say "it was done before" and then goes on to show some 60s or 70s stuff to back his claim even if it does not. search youtube for all his video same rhetoric you would hear!

    • @skepticmoderate5790
      @skepticmoderate5790 4 года назад +2

      Yeah Henney tends to recycle his material quite a lot.

    • @casperes0912
      @casperes0912 4 года назад +1

      Weird you say this on this talk though since this was different to most of his other ones. He didn't even mention the Singleton whiskey! - I love him though. Big fan.

  • @jeremypnet
    @jeremypnet Год назад

    14:23 Excel now has lambdas.

  • @alexanderilin8720
    @alexanderilin8720 2 года назад

    Too bad he didn't include Factor (the language) in his talk.

  • @gnul
    @gnul 3 года назад

    Lambda 3 => When()

  • @kavorkagames
    @kavorkagames 4 года назад +2

    I don't think it means what you think it means.

    • @otesunki
      @otesunki 4 года назад

      I do not think it is defined as what you have been accustomed to define it as.
      ( Not trying to show off, this is a joke. )

    • @kavorkagames
      @kavorkagames 4 года назад +1

      ruclips.net/video/dTRKCXC0JFg/видео.html

    • @otesunki
      @otesunki 4 года назад

      @@kavorkagames WAIT IT'S THERE TOO?!?

  • @johningles1098
    @johningles1098 2 года назад

    Commenting from the future where excel now has lambdas 😄

    • @cruz1ale
      @cruz1ale 2 года назад

      I thought he meant that in Excel you can just do =A1*A1 in a cell and get a result. That's a lambda since you're not actually naming a function elsewhere and then calling that in the cell

  • @PaulPaulPaulson
    @PaulPaulPaulson 4 года назад +1

    52:00 _2 is not a good name, because it's not the number, it's an "apply twice" and should be named something like apply2Times.
    Only if you bind it to the increment function and a start value of 0 it becomes an integer two.
    _int2 = () => apply2Times(n => n +1)(0)
    This of course limits it to integers, but you can easily avoid that by adding an argument for the number type. The number type would be an interface which provides the zero-element and the increment operation.
    _2 = (numberType) => apply2Times(n => numberType.increment(n))(numberType.zeroElement)
    _int2 = () => _2(int)
    _double2 = () => _2(double)

    • @virkony
      @virkony 4 года назад +3

      That's a "beauty". Church numerals "have no meaning", but only expression structure. Once you define terms you can collapse to "value" encoded in it.
      as_int = a => a(x => x + 1)(0)
      as_float = a => a(x => x + 1.0)(1.0)
      as_bool = a => a(_ => true)(false) // 'add' becomes 'or', 'mul' becomes 'and', anything beside '_0' becomes 'true'
      as_roman = a => a(x = x + "I")("")

    • @zTJq40sl
      @zTJq40sl 3 года назад +3

      In pure lambda calculus, there are no numbers. There are only lambdas. So if you want to represent numbers in pure lambda calculus, you have to represent them by lambdas. Lambdas that are built from nothing but lambdas.
      JavaScript isn't lambda-calculus, but as it has all ingredients that lambda calculus requires, the talk can use it to show how this would be done.
      You're taking JS's built-in numbers too literal. (Pun intended.) In the talk, they're only used for illustration. Assume a JS variant that doesn't have them. You'd have to re-build everything from first principles, i.e. (here) from lambdas.* "apply twice" would be one of the simplest representations of the concept "two" that you'd be able to construct. If it's the closest thing to "two" that you can ever get, you might as well call it "2". Except that JS identifier naming rules don't allow a non-literal to be named "2", so you name it "_2".
      *By the way, lambda calculus isn't the only thing from which you can pretend that "numbers don't exist, but let's (re-)invent them". You can for example also do this from the axioms of set theory. Set theory only cares about sets. It doesn't know about "numbers". But it turns out, you can construct sets of sets that perfectly represent numbers. For non-negative integers, you could do this:
      0 := {}
      1 := {{}}
      2 := {{{}}}
      3 := {{{{}}}}

      or
      0 := {}
      1 := {{}}
      2 := {{}, {}}
      3 := {{}, {}, {}}

      or
      0 := {}
      1 := {0} = {{}}
      2 := {0, 1} = {{}, {{}}}
      3 := {0, 1, 2} = {{}, {{}}, {{}, {{}}}}

      Now obviously, {{{{}}}} ≠ {{}, {}, {}} ≠ {{}, {{}}, {{}, {{}}}}, so how can they all be 3? They're different ways to represent numbers using just sets, and cannot be mixed. Just like "3", "III", "three", "drei", "trois", "tri" are different ways to represent that number. You have pick one convention of representation / know which convention is used, or there will be confusion. Likewise, _2 as defined in the talk (the "apply twice" thingy) and JavaScript's build-in 2 are not the same thing, but can both be used to represent the more abstract concept of two-ness.

  • @MSStuckwisch
    @MSStuckwisch 4 года назад +7

    *sigh* Perl is only executable line noise if you choose to make it as such. It's just the culture of people who thinks it's cool to golf everything always crossed with Perl's ability to actually be golfed down to small sizes that has contributed to some of the most hideous examples of coding line noise. IMO, the extreme readability of Raku (née Perl 6) code is evidence of it. At its core, you can write many things virtually identically but most folk who write Raku code (if you peruse the ecosystem) are stunningly easy to read and follow, even without an IDE doing syntax highlighting.

    • @williamwest3594
      @williamwest3594 4 года назад

      I'm thinking of jumping into Raku. Your tiny review of it's making me think extra . . .

  • @atrus3823
    @atrus3823 2 года назад

    Doesn't "schema" have 6 letters?

    • @jeremypnet
      @jeremypnet Год назад +1

      Schemer not schema. It followed the pattern of mapper and planner.

  • @Verrisin
    @Verrisin 2 года назад

    so... actor is just a lambda with a mutable closure? ... is the idea? ... (and synchronized)
    ...hmm.... I guess so...

  • @austinleedavis
    @austinleedavis 2 года назад

    Excel now has lambdas. Prepare your bunkers.

  • @LambdaJack
    @LambdaJack 4 года назад +2

    Lambda is the GNU GOTO.

  • @uplink-on-yt
    @uplink-on-yt 2 года назад

    So this is how Bret Victor's glorified typewriters came about....

  • @adriandesilva1052
    @adriandesilva1052 2 года назад

    ayyy, British humour, there is something posh about it..

  • @williamwest3594
    @williamwest3594 4 года назад +1

    Perl's line noise? Horse hockey! If you can't write readable Perlish code, you need a strong talking to.
    I mean, this is clear as crystal.
    .
    E.g.,
    .
    for $bob ( 'fnord', 'slack' ){
    .
    $multiply = sub{ (pop)* 2 } if $bob eq 'fnord';
    .
    $multiply = sub{ (pop) * 3 } if $bob eq 'slack';
    .
    print $multiply->(21), "
    "
    }

  • @isbestlizard
    @isbestlizard 3 года назад +1

    Oh god functional programmers are the worst it's like maths nerds and computer science nerds had babies. I just tell them if you're not allowed side effects how do you ever do anything useful. Check mate.

  • @_vofy
    @_vofy 4 года назад

    E=mc^2

  • @Lammot
    @Lammot 4 года назад

    i didn't understand shit :(

  • @titaluna3165
    @titaluna3165 3 года назад

    The purring airplane interspecifically spare because place curiosly announce given a knowing tie. three, clever handle

  • @jamesmccabe2286
    @jamesmccabe2286 3 года назад

    The squeamish cross acromegaly travel because page gratifyingly tire despite a stimulating node. awake, wacky plastic

  • @simonwang8780
    @simonwang8780 3 года назад

    The instinctive zephyr statistically open because diving additonally place between a super pumpkin. erratic, anxious singer

  • @UODZU-P
    @UODZU-P 4 года назад +1

    He lost me when he said use Powershell

    • @Parker8752
      @Parker8752 4 года назад +5

      I mean, it's as close to a decent command line as Windows had access to prior to WSL...

    • @tantalus_complex
      @tantalus_complex 3 года назад +2

      It's the most well-organized popular shell language. It has the symbolic power of Microsoft against it, and it suffers from some verbosity perhaps (subjective, of course), but in itself it is a solid and creative re-imagining of what it takes to be shell language.

  • @jamesmccabe2286
    @jamesmccabe2286 3 года назад

    Yeah, idk, my use of lambda comes in waves.