🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.misc
Article #2775

Re: On whether C has first-class composable functions

#2775
From: Alan Myrvold
Date: Tue, 12 Feb 1991 19:32
61 lines
1836 bytes
In article <7027:Feb906:42:0991@kramden.acf.nyu.edu> brnstnd@kramden.acf.nyu.edu
 (Dan Bernstein) writes:
> All seven working implementations I've seen here allow nested composition.

Instead of all of the flamage, how about someone posting these 7 implementations
for comment?

------------------------
int main()
{
   if (main == &main) puts("C does not have first class functions");
}
------------------------
Obligatory compose implementation :
------------------------
#include <stdio.h>

typedef struct {
   int (*a)(),(*b)(),(*c)();
} c_f;

c_f compose(a,b)
int (*a)(),(*b)();
{
    c_f cf;

    cf.a = NULL;
    cf.b = a;
    cf.c = b;

    return cf;
}

int apply(cf,x)
c_f *cf;
int x;
{
   if (!cf->a) { 
      return apply(cf->b,apply(cf->c,x));
   } else {
      return ((int (*)()) cf)(x);
   }
}

int square(x) int x; { return x*x; }

int main()
{
  c_f sqsq,sqsqsq;

  sqsq = compose(square,square);      /* put square o square in sqsq */
  sqsqsq = compose(square,&sqsq);     /* put square o sqsq in sqsqsq */
  printf("%d\n",apply(&sqsqsq,2));    /* apply sqsqsq to 2 and print it */

  return 0;
}
------------------------
Alan Myrvold          3755 Riverside Dr.     uunet!mitel!cunews!cognos!alanm
Cognos Incorporated   P.O. Box 9707          alanm%cognos.uucp@ccs.carleton.ca
(613) 738-1440 x5530  Ottawa, Ontario       
                      CANADA  K1G 3Z4       
Technical Details
Message-ID: <9321@cognos.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!cunews!cognos!alanm
References: <7027:Feb906:42:0991@kramden.acf.nyu.edu>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!cunews!cognos!alanm
From: alanm@cognos.UUCP (Alan Myrvold)
Newsgroups: comp.lang.misc
Subject: Re: On whether C has first-class composable functions
Message-ID: <9321@cognos.UUCP>
Date: 12 Feb 91 19:32:27 GMT
References: <7027:Feb906:42:0991@kramden.acf.nyu.edu>
Reply-To: alanm@cognos.UUCP (Alan Myrvold)
Organization: Cognos Inc., Ottawa, Canada
Lines: 61