[#16113] Strange idea... exporting from a scope — "Hal E. Fulton" <hal9000@...>

Hello...

33 messages 2001/06/01

[#16364] Re: Garbage Collection? — Michael Davis <mdavis@...>

Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs.

12 messages 2001/06/09

[#16400] Symbolic Computation III — Mathieu Bouchard <matju@...>

14 messages 2001/06/11

[#16502] Playing with Ruby Syntax (was: Initial thoughts about Ruby From a Smalltalk Programmer) — jweirich@...

Michael> Hi Everyone, I have to say I'm utterly fascinated by Ruby

9 messages 2001/06/15

[#16661] Problem running irb with Ruby 1.6.4 under FreeBSD 4.0 — Bob Alexander <balexander@...>

I've installed Ruby 1.6.4 on a FreeBSD 4.0 machine, and get the

11 messages 2001/06/20

[#16686] opening db files made by apache dbmmanage — Fritz Heinrichmeyer <fritz.heinrichmeyer@...>

14 messages 2001/06/21

[#16801] rb_define_class() vs Class.new() — Kero van Gelder <kero@...4050.upc-d.chello.nl>

Hi,

18 messages 2001/06/23
[#16802] Re: rb_define_class() vs Class.new() — ts <decoux@...> 2001/06/23

>>>>> "K" == Kero van Gelder <kero@d4050.upc-d.chello.nl> writes:

[#16841] RE: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...>

Next week I'll try to rebuild Ruby with Unicode strings. But it would be

15 messages 2001/06/25
[#16842] Re: national characters is strings — matz@... (Yukihiro Matsumoto) 2001/06/25

Hi,

[#16843] Re: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/25

That's good enough. But I'm afraid this could ( not would ) cause string

[#16868] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

14 messages 2001/06/25
[#16873] RE: Something strange with Ruby's inheritance mechanism — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/26

[#16879] Re: Something strange with Ruby's inheritance mechanism — Mathieu Bouchard <matju@...> 2001/06/26

On Tue, 26 Jun 2001, Aleksei Guzev wrote:

[#16869] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

12 messages 2001/06/25

[#16881] — "Aleksei Guzev" <aleksei.guzev@...>

32 messages 2001/06/26
[#16916] Re: Method overloading (option) Was: Re: — "Wayne Blair" <wayne.blair@...> 2001/06/26

[#16920] Re: Method overloading (option) Was: Re: — matz@... (Yukihiro Matsumoto) 2001/06/26

Hi,

[#16888] finalizers, destructors and whatnot — "David Leal" <david@...>

Hi all,

16 messages 2001/06/26

[#17037] keeping an Exception object alive — David Alan Black <dblack@...>

Hello --

19 messages 2001/06/28
[#17055] Re: keeping an Exception object alive — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17066] RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17076] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17079] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17138] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/07/02

Hi,

[#17141] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/07/02

Hello --

[#17142] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — ts <decoux@...> 2001/07/02

>>>>> "D" == David Alan Black <dblack@candle.superlink.net> writes:

[ruby-talk:16340] Lisp vs. Perl Round 3: Operator Associativity and Manipulation

From: ken.lacrosse@...
Date: 2001-06-08 19:14:30 UTC
List: ruby-talk #16340
Thought the list might find this of interest.

Ken
---------------------- Forwarded by Ken LaCrosse/FOL/CDI/CHI/US on 06/08/2001
12:12 PM ---------------------------


Terrence Monroe Brannon <terrence.brannon@oracle.com> on 06/08/2001 10:20:35 AM

To:   perl-ai@perl.org
cc:    (bcc: Ken LaCrosse/FOL/CDI/CHI/US)
Subject:  Lisp vs. Perl Round 3: Operator Associativity and Manipulation



TITLE
    Lisp vs Perl Round One: Operator Associativity and Manipulation

BACKGROUND
    In the process of converting a general pattern matcher (regular
    expressions are pattern matchers limited to processing strings)
    discussed in Peter Norvig's "Paradigms of Artificial Intelligence:
Case
    Studies in Common Lisp", I ran into a doosy. Something was a snap to
do
    in Lisp, but far from trivial in Perl. First the lisp code:

     (defun match-if (pattern input bindings)
     "Test an arbitrary expression involving variables. The pattern
looks
      like ((?if lisp-code) . rest)."
      (and (progv   (mapcar #'car bindings)
                    (mapcar #'cdr bindings)
                 (eval (second (first pattern))))
           (pat-match (rest pattern) input bindings)))

    What this code is doing is taking some lisp code and evaluating it
    within a certain context. What is a context? A context is a set of
    variable bindings. What the mapcar statement above is doing is
setting
    up a set of variable bindings so that when the lisp-code is
evaluated,
    it is evaluated in the context of those bindings. Then what happens
is
    the eval evauluates the lisp code with the variable bindings from
the
    context as a frame of reference.

    The difficulty in converting this to Perl lies in the fact that
    operators are not first class. Let's see an example of this lisp
    pattern-matcher in action:

     >> (pat-match  '(?x ?op ?y is ?z (?if (eql (?op ?x ?y) ?z)))
                    '(3   +   4 is  7))

     >> ((?z . y) (?y . 4) (?x . 3))

    What happened is that ?x got bound to 3, ?op got bound to + and ?z
got
    bound to 7 and then the pattern matcher called the if-block based on
the
    context formed by the earlier matches in the pattern.

    Note how easily Lisp took an operator and stored it in a variable
just
    like anything else in Lisp. Second (though not the focus of this
paper),
    note how easy it was for the if block to receive and use a context.
In
    Perl, operators and contexts are not truly first class, meaning you
    can't pass them around and you can't assign them to variables...
easily.
    They are in fact available to the Perl parser and a complicated set
of
    parsing modules, but such Herculean efforts appear ridiculous
compared
    to the expressive ease shown above.

    In order for you to see firsthand what I am talking about with
respect
    to Perl, let's take a stab at writing that powerful little Lisp
snippet
    in Perl. First what would our pattern look like:

     $pattern = [qw(X OP Y is Z),
                    'IF',
                    sub {$_[0]->{X} $_[0]->{OP} $_[0]->{Y} ==
$_[0]->{Z}} ];
     $input   = [  3 '+' 4 is 7 ] ;

    And here is our call to get the ball rolling:

    pat_match ($pattern, $input, $bindings) ;

    ## And our desired output:

     { X => 3, Y => 4, Z => 7, OP => '+' }

    sub match_if { my ($pattern, $input,$bindings) = @_ ;

          $pattern->($bindings) ;
    }

    The above subroutine would work well, but it has a problem. There is
no
    way to assign the '+' to $_->{OP} ; Also, the actual if subroutine
    reference must pander to Perl's complex associativity rules. In both
    respects, Lisp is easier. As stated earlier playing with Lisp
operators
    is a snap:

     (setq op  '+)
     (funcall op 2 2)

    and associativity is a snap: just follow the parentheses.

    The only way to handle a problem like this in Perl is to resort to
    source filtering or parsing. And then you must make sure that your
    minilanguage emulates the associativity semantics of Perl as well as
    Perl in all respects...



In This Thread

Prev Next