On Tuesday, October 4, 2016 at 10:15:10 PM UTC+5:30, Steve D'Aprano wrote: > On Tue, 4 Oct 2016 11:27 pm, Ben Bacarisse wrote: > > > Haskell defines let (it's version of multiple mutually recursive > > bindings) in terms of the least fix point of a lambda function whose > > (pattern) parameter binds the expressions in the definitions. > > It binds *the expression* itself? Not the value of the expression?
Lazy evaluation — one of the more touted features of Haskell — uses call-by-need which is like memoized call-by-name: https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_need > > So Haskell uses some form of pass by name? > > And (shamelessly using Python syntax) if I have a function: > > > def spam(x): > print(x) > print(x+1) > > > and then call it: > > spam(time.sleep(60) or 1) > > > it will sleep for 60 seconds, print 1, then sleep for another 60 seconds, > then print 2. Is that right? Strong type system would not allow mixing of effects and values like that -- https://mail.python.org/mailman/listinfo/python-list