merits of Lisp vs Python

André Thieme address.good.until.2007.feb.05 at justmail.de
Fri Dec 15 17:19:38 EST 2006


mikael.jansson at gmail.com schrieb:
William James schrieb:
 >>> How would you solve this in Python?
 >>> You could embed it inside a lambda and must somehow make the
 >>> variable "it" visible in it, because in the context of aif this
 >>> "it" gets bound to the result.In Ruby:
 >> def aif val
 >>   yield val   if val
 >> end
 >>
 >> def complex_calc n
 >>   if n % 2 == 1
 >>     n**n
 >>   else
 >>     nil
 >>   end
 >> end
 >>
 >> aif( complex_calc( 9 ) ) {|x| puts "hello, #{x}"}
 >> aif( complex_calc( 8 ) ) {|x| puts "hello, #{x}"}
 >>
 >> ---  output  -----
 >> hello, 387420489
 >>
 > Okay, so it's certainly _doable_. I think the question is more if it's
 > usable. Regular if:s don't like that in Ruby/Python/similar, and adding
 > such a construct would mean extending the syntax.
 >
 > In Lisp, all (well, almost) functions are equal, so an (if ...) would
 > look the same like the (aif ...).  I think that's the point here.

Exactly that is the point.
*Of course* it is doable.
And what William shows us is maybe one of the best solutions
in Ruby. He used advanced abstractions that made it possible.
The thing with most (if not all) programming languages other than Lisp
is: these abstractions are leaky.
They have a low level knowledge leak. Users of aif need to know how to
pass in arguments. As you see he had do embed the code that needs execution
into a block (anon function) and then use this special syntax for x.


André
-- 



More information about the Python-list mailing list