With all humility, not wishing to imply that I have his greatness (or indeed anything more than glints of occasional competence)... Late in his career, Neil Peart took drum lessons -- in jazz. So it might also be for me, coming from a procedural/object-based background (heavy on the former), as I take the plunge into functional /combinatorial. I find it all very intriguing. Thanks to Conor and everyone for the talks.
Regarding the light/dark mode change and comment at 46:30, it's worth noting that presentations given in dark mode are generally less visible than those in light mode. In the live room, any ambient light can wash out the "dim" image. And for UA-cam viewers in bright environments (such as outside or by a window), the same is true. In contrast (no pun intended), light mode content can always be dimmed at the display device. So those late night viewers can just turn their screen brightness down. Unless you know your current and future audience will be in low light environments, Light Mode is the safe choice.
12:00, *1888. 15:34, what?! Do you know any other kind of software they are willing to pay millions? 38:30, to map true/false keeping their positions/indexes. If that's not required, std::partition puts all trues at the beginning, returning a pointer to where they finish and to where the falses start. And std::stable_partition, despite obviously not keeping their indexes, keep their positions related to each other, at each group. 56:00, auto sum_of_squares (std::vector nums) {return std::accumulate (nums.begin(), nums.end(), 0, [](auto x, auto i) {return !(nums.size() % i)*x*x;});}
Futhark sample: let SumOfSquares a = map2 (\x i -> if length a % (i+1) == 0 then x*x else 0) a (indices a) |> reduce_comm (+) 0 This isn't point free but does use three different combinators. |> could be replaced by reordering with parenthesis, but the map-reduce array combinators are the expected way to handle arrays. The filter was avoided using a neutral element, because realizing the filtered list could cause multiple heavier passes.
51:03 I think contemporary c++ devs can think or appreciate “point free” because it typically corresponds to composing chains of operations in the same manner that std::ranges::views can be composed using the pipe operator
With all humility, not wishing to imply that I have his greatness (or indeed anything more than glints of occasional competence)... Late in his career, Neil Peart took drum lessons -- in jazz. So it might also be for me, coming from a procedural/object-based background (heavy on the former), as I take the plunge into functional /combinatorial. I find it all very intriguing. Thanks to Conor and everyone for the talks.
Although the subject matter by itself may not draw much interest, your enthusiasm for it certainly does.
Regarding the light/dark mode change and comment at 46:30, it's worth noting that presentations given in dark mode are generally less visible than those in light mode. In the live room, any ambient light can wash out the "dim" image. And for UA-cam viewers in bright environments (such as outside or by a window), the same is true. In contrast (no pun intended), light mode content can always be dimmed at the display device. So those late night viewers can just turn their screen brightness down. Unless you know your current and future audience will be in low light environments, Light Mode is the safe choice.
Amazing!
30:00 Combinator = Composition Pattern
12:00, *1888.
15:34, what?! Do you know any other kind of software they are willing to pay millions?
38:30, to map true/false keeping their positions/indexes. If that's not required, std::partition puts all trues at the beginning, returning a pointer to where they finish and to where the falses start. And std::stable_partition, despite obviously not keeping their indexes, keep their positions related to each other, at each group.
56:00, auto sum_of_squares (std::vector nums) {return std::accumulate (nums.begin(), nums.end(), 0, [](auto x, auto i) {return !(nums.size() % i)*x*x;});}
great talk. thanks
Futhark sample:
let SumOfSquares a = map2 (\x i -> if length a % (i+1) == 0 then x*x else 0) a (indices a) |> reduce_comm (+) 0
This isn't point free but does use three different combinators. |> could be replaced by reordering with parenthesis, but the map-reduce array combinators are the expected way to handle arrays. The filter was avoided using a neutral element, because realizing the filtered list could cause multiple heavier passes.
51:03 I think contemporary c++ devs can think or appreciate “point free” because it typically corresponds to composing chains of operations in the same manner that std::ranges::views can be composed using the pipe operator
Moses Schönfinkel birth date is 1888 not 1988.(typo)
18:58 Futhark should be an array language, no?
Is map a combinator? Is bind a combinator?
46:50 does readability count?
8:40 they did not fix it in post
:o 🎉
The definition of pure function and distinction isn't really correct. A combinator is a pure function that is not a closure, that's it.
That fromEnum solution is absolutely awful and haskell does have a count function... Not like you couldn't have defined it yourself