Angus Lees wrote:

At Thu, 29 Sep 2005 18:38:31 +1000, Oscar Plameras wrote:
Is their equivalent codes for ff in  perl 6 ?

Sure, perl6 (just as in perl5) has coderefs.  In fact, these can be
references to anonymous functions or dynamically created closures,
which certainly can't be done in C.

[EMAIL PROTECTED] oscarp]# cat f.c
int main(void)
{
       int (*get_f())();
       static int arr[] = { -1, 0, 1, 0, 2, +9, +3200, -3500 };
       int *ptr, *pastend;
       int (*fptr)();
       pastend = arr + sizeof(arr)/sizeof(arr[0]);
       for (ptr = arr; ptr < pastend; ptr++)
               if (fptr = get_f(ptr))
                       fptr(ptr);
       return 0;
}

int (*get_f(ptr))()
int *ptr;
{
       int is_neg(), is_pos();
       static int (*cmds[])() = {
               (int (*)())0,
               is_neg,
               is_pos
       };
       int index = 0;
       if (*ptr < 0)
               index = 1;
       if (*ptr > 0)
               index = 2;
       return(cmds[index]);
}
is_neg (iptr)
int *iptr;
{
       printf("%d is negative\n", *iptr);
}
is_pos (iptr)
int *iptr;
{
       printf("%d is positive\n", *iptr);
}

Deliberately reproducing the structure of the C program:

#!/usr/bin/pugs
use v6;

sub get_f (Int $i) {
  our @cmd is private //=
    (undef, { say "$^a is negative" }, { say "$^a is positive" });
  my $index = 0;
  if    ( $i < 0 ) { $index = 1 }
  elsif ( $i > 0 ) { $index = 2 }
  return @cmd[$index];
}

my int @arr = (-1, 0, 1, 0, 2, 9, 3200, -3500);
for @arr {
  my $fptr = get_f($_);
  $fptr($_) if $fptr;
}


But you are choosing awkward examples around trivial numerical
operations.  Basic numeric operations and branching are things C can
do quite easily (provided the numbers fit within C's types).  Try
common coding needs that C can't handle easily, like string
manipulation or memory management during error recovery.  Oscar, I
suggest you actually use a high level language for a while and then
try going back to C.  Doing anything in C (or even java for that
matter) is just so much tedious typing.


Thanks for that.

I know that the codes are meaningless at face value, but you
can look at it as a prototype for many programming formats. I've used
this format myself in real applications.

The use of numerics are trivial. The static array could be commands,
or something else, or could be replaced by structures.

--
O Plameras
http://www.acay.com.au/~oscarp/tutor

--
SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html

Reply via email to