Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^5: Next Language to Learn

by rovf (Priest)
on Mar 31, 2010 at 07:37 UTC ( #831993=note: print w/ replies, xml ) Need Help??


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

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>


Comment on Re^5: Next Language to Learn
Download Code
Re^6: Next Language to Learn
by LanX (Canon) on Mar 31, 2010 at 11:12 UTC
    > 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>
        Is this supposed to be Haskell code or Haskell semantics?

        For me it looks more like LISP phrased in Perl..

        Did you mean:

        sub all_even_from{ my $even=shift; sub { $even+=2; } } $iter=all_even_from(4); print $iter->() for (1..5);
        ?

        > so maybe your general idea of using an operator would lead in the right direction...

        I didn't talk about operators but about tie.

        Using Tie::Array you could try to tie the iterator to an array @even such that you can subsequently write something like this, _with_ lazy evaluation.

        for (1 ..5) { print shift @even; }

        again, show me what you like about Haskell - eg list comprehensions (???) - and I will see whats feasible.

        Cheers Rolf

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://831993]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (6)
As of 2015-07-03 03:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (48 votes), past polls