merits of Lisp vs Python

William James w_a_x_man at yahoo.com
Fri Dec 15 18:14:31 EST 2006


André Thieme wrote:
> 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é
> --

I may have tried too hard.  The simpler way is usually better.
No aif() is needed:

if x = complex_calc( 9 )
  puts "hello, #{x}"
end




More information about the Python-list mailing list