http://www.perlmonks.org?node_id=831881


in reply to Re^3: Next Language to Learn
in thread Next Language to Learn

Sorry I didn't intend to criticize you, it's only my personal impression after a long indoctrination...

Me, I'm rather interested to realize different paradigms in Perl, maybe by extending the language.

(even if it provokes the resistance of local clerics... ;)

Cheers Rolf

Replies are listed 'Best First'.
Re^5: Next Language to Learn
by rovf (Priest) on Mar 31, 2010 at 07:37 UTC
    Sorry I didn't intend to criticize you
    I didn't interpret it that way ;-)

    I'm rather interested to realize different paradigms in Perl, maybe by extending the language.
    For instance it would be interesting to see, how easy/clumsy it is to retrofit lazy evaluation into Perl.

    With enough pertinacity, every language can be made to look like LISP :-D

    -- 
    Ronald Fischer <ynnor@mm.st>
      > For instance it would be interesting to see, how easy/clumsy it is to retrofit lazy evaluation into Perl.

      E.g.you can tie an iterator to a variable.

      I'm not fluent in Haskell, so gimme an example and I'll see what's possible.

      > With enough pertinacity, every language can be made to look like LISP :-D

      Well, unfortunately it's not trivial to realize LISPish macros in Perl 5, otherwise most language extensions I can think of would be easily possible.

      Compare Re^2: Dumping variables but DRY and simple for a use case for a macro.

      Cheers Rolf

        > For instance it would be interesting to see, how easy/clumsy it is to retrofit lazy evaluation into Perl. E.g.you can tie an iterator to a variable. ... gimme an example and I'll see what's possible.
        Good point.

        For example, we have a function which generates the list of all even numbers, i.e.

        sub list_all_even { _list_all_even_from(0) } sub _list_all_even_from { my $from=shift; ($from, _list_all_even_from($from+2)) }
        and a function which returns the first n elements from a list:
        sub head { my ($n,@list)=@_; $n ? ($list[0],head($n-1,butfirst(@list))) : () } sub butfirst { shift; @_ }

        Calling head(5,list_all_even) should return the first even numbers, but in the implementation I gave, list_all_even would, of course, loop forever. Under lazy evaluation, list_all_even would only produces those values which are actually needed, so maybe your general idea of using an operator would lead in the right direction...
        -- 
        Ronald Fischer <ynnor@mm.st>