Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
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 taking refuge in the Monastery: (8)
As of 2014-09-16 18:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (40 votes), past polls