13:27:29 From Karl Hallsby : @Jacek, so functional programming is the consecutive evaluation of expressions; whereas imperative programming is the evaluation of statements, moving us between states in a state machine? 13:33:07 From Gabriel Borglund : Is this always the case in haskell. Evaluation from left to right? 13:40:18 From Karl Hallsby : Are there languages that allow for reduction inside lambda expressions? 13:43:12 From Lavender : So, plus = \x -> \y -> x + y works as declaration? 13:43:47 From Gabriel Borglund : Is there a good explanation somewhere? Could you redirect us to some good written source? 13:55:26 From Gabriel Borglund : How would pointers work in the inf example? 13:57:16 From Karl Hallsby : Can we only use sharing HERE because the evaluation of expressions is pure? 13:58:20 From Gabriel Borglund : Or will pointers never be used for recursive definitions. IE only where the “name” of the function is actually exactly the same? 14:01:01 From Hannes : I have three questions. 1. What is a good definiton of a pure function, or equivalently, what a side effect is? Also, will we cover the proof of the Church-Rosser theorem? 2. What is the definition of a redex? It seems easy to define what a "rewrite" is, but is there a good one for an expression being "reduced"? Obviously just saying it takes fewer characters to express won't do. I can see why rewriting 2 * 3 to 6 is a reduction, while rewriting 6 to 2 * 3 is not, but what is the actual definition? 3. How does the compiler realize that/when it needs to use sharing? 14:16:51 From Johannes Aronsson : 8 Days for a 20*2 hour assignment seems pretty short to me. Will it be possible to post the last assignment with some more time? 14:24:08 From Hannes : How would reverse work with infinite lists? E.g. reverse [1..] does not make sense, but what about reverse ones? 14:29:42 From Hannes : yes 14:29:42 From Gabriel Borglund : yes 14:29:42 From Joel Bäcker : yes 14:38:35 From Gabriel Borglund : So haskell is non strict? 14:48:04 From Gabriel Borglund : So the Normal form is also part of the weak head normal form? 14:49:00 From Hannes : How come we say that (4, 1:2:[]) is normal form, even though this can be evaluated to (4, [1,2])? 14:50:37 From Hannes : But what about (1, 1+2)? Would that also be considered normal form? If not, what makes 1:2:[] different from 1+2? 14:52:08 From Jacek Malec : 1: [2,3]. = [1,2,3] 14:53:10 From Jacek Malec : 1:2:3:[] 14:53:24 From Jacek Malec : [1+2,3] 14:53:48 From Hannes : Ah ok, thanks :) 14:54:51 From Lavender : what's diff. between case and guards? 14:54:52 From Gabriel Borglund : So given an argument a :: int, the list a:[1,2] would need to evaluate to the list where the head is the value of a? 14:55:01 From Joseph Atalla : so (1+2):3:[] is normal form? 14:55:25 From Gabriel Borglund : Joseph the 1+2 would need to be evaluated 14:55:37 From Joseph Atalla : oh okay