Lambda? You Keep Using that Letter - Kevlin Henney

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 138

  • @Typhoonbladefist
    @Typhoonbladefist 4 роки тому +247

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

    • @DeepDuh
      @DeepDuh 4 роки тому +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 5 місяців тому

      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.

  • @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.

  • @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.

  • @crashmatrix
    @crashmatrix 4 роки тому +35

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

  • @nickdrian510
    @nickdrian510 2 роки тому +1

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

  • @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.

  • @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 4 роки тому +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 4 роки тому

      I watch this 47 times a day

  • @oliviermallet5460
    @oliviermallet5460 4 роки тому +7

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

  • @Respectable_Username
    @Respectable_Username Рік тому

    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!

  • @MM-pi2sv
    @MM-pi2sv 4 роки тому +1

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

  • @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.

  • @cmw3737
    @cmw3737 4 роки тому +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).

  • @isbestlizard
    @isbestlizard 4 роки тому +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'

  • @zinglau
    @zinglau 4 роки тому +3

    Related to the final part: David Beazley did the lamda implementation of logic and numbers etc. using Python in ua-cam.com/video/pkCLMl0e_0k/v-deo.html

  • @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.

  • @stevenshrii
    @stevenshrii 2 роки тому

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

  • @seanwarren9357
    @seanwarren9357 4 роки тому +14

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

  • @ModeratelyInsane
    @ModeratelyInsane 4 роки тому +6

    "Moderately insane" hahaha i love this guy

  • @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".

  • @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?"

    • @鲍凯文
      @鲍凯文 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 роки тому

      @@鲍凯文 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.

  • @MrDiaxus
    @MrDiaxus 4 роки тому +7

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

  • @popularmisconception1
    @popularmisconception1 2 роки тому +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 Рік тому

      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).

  • @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

  • @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

  • @PaulPaulPaulson
    @PaulPaulPaulson 4 роки тому +3

    Thumbs up from a former Smalltalk programmer for mentioning Alan Kay

  • @edgeeffect
    @edgeeffect 4 місяці тому

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

  • @Alex-dn7jq
    @Alex-dn7jq 4 роки тому +1

    for the parenthesis thing, have a look at F#

  • @sasukesarutobi3862
    @sasukesarutobi3862 2 роки тому +2

    14:10 Microsoft have since included lambdas in Excel

  • @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!

  • @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.

  • @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...

  • @JohnDlugosz
    @JohnDlugosz 4 роки тому +6

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

  • @Cenitopius
    @Cenitopius Рік тому

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

  • @brandonbenson2055
    @brandonbenson2055 4 роки тому +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.*

  • @MusashiHunter3
    @MusashiHunter3 Рік тому

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

  • @edgeeffect
    @edgeeffect 3 роки тому

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

  • @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 UA-cam 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 ;)

  • @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!

  • @gustavcoetzee5018
    @gustavcoetzee5018 2 роки тому

    Thank you

  • @otesunki
    @otesunki 4 роки тому +2

    I watch this 47 times a day

  • @maswinkels
    @maswinkels 4 роки тому +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.

  • @samferrer
    @samferrer 3 роки тому

    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();

  • @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. :)

  • @cr6925
    @cr6925 4 роки тому +4

    A lot of words about - what ?

  • @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 . . .

  • @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

  • @pigboiii
    @pigboiii 4 роки тому

    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...

  • @ajar1000
    @ajar1000 4 роки тому +1

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

  • @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.

  • @daniilselivanov1251
    @daniilselivanov1251 4 роки тому

    Impressive af!

  • @kenzmail5243
    @kenzmail5243 2 роки тому

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

  • @alexanderilin8720
    @alexanderilin8720 2 роки тому

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

  • @TigerSpiderTube
    @TigerSpiderTube Рік тому

    I'm now going to watch the cricket.

  • @jeremypnet
    @jeremypnet 2 роки тому

    14:23 Excel now has lambdas.

  • @gnul
    @gnul 4 роки тому

    Lambda 3 => When()

  • @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

  • @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

      ua-cam.com/video/dTRKCXC0JFg/v-deo.html

    • @otesunki
      @otesunki 4 роки тому

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

  • @Verrisin
    @Verrisin 2 роки тому

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

  • @wagyourtai1
    @wagyourtai1 Рік тому

    11.20 GROOVY

  • @austinleedavis
    @austinleedavis 2 роки тому

    Excel now has lambdas. Prepare your bunkers.

  • @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 4 роки тому +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.

  • @ifireblade09
    @ifireblade09 4 роки тому

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

  • @michaeljuliano8839
    @michaeljuliano8839 4 роки тому +2

    Silence of the Lambdas. XD I'm dead.

  • @joebowbeer
    @joebowbeer Рік тому

    25:18 Wizard Book

  • @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....

  • @atrus3823
    @atrus3823 2 роки тому

    Doesn't "schema" have 6 letters?

    • @jeremypnet
      @jeremypnet 2 роки тому +1

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

  • @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 4 роки тому +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.

  • @jamesmccabe2286
    @jamesmccabe2286 4 роки тому

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

  • @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.

  • @_vofy
    @_vofy 4 роки тому

    E=mc^2

  • @simonwang8780
    @simonwang8780 4 роки тому

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

  • @Lammot
    @Lammot 4 роки тому

    i didn't understand shit :(

  • @titaluna3165
    @titaluna3165 4 роки тому

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

  • @jamesmccabe2286
    @jamesmccabe2286 4 роки тому

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