Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!seismo!husc6!mit-eddie!uw-beaver!tektronix!tekcrl!tekchips!willc From: willc@tekchips.TEK.COM (Will Clinger) Newsgroups: comp.lang.misc Subject: Re: H.O.Functions + Polymorphism Message-ID: <1432@tekchips.TEK.COM> Date: Thu, 9-Jul-87 19:33:37 EDT Article-I.D.: tekchips.1432 Posted: Thu Jul 9 19:33:37 1987 Date-Received: Sun, 12-Jul-87 07:29:56 EDT References: <1345@ogcvax.UUCP> <441@unisoft.UUCP> Reply-To: willc@tekchips.UUCP (Will Clinger) Distribution: world Organization: Tektronix, Inc., Beaverton, OR. Lines: 32 In article <441@unisoft.UUCP> jef@unisoft.UUCP (Jef Poskanzer) writes: >int p1(x) >int x; > { > return x + 1; > } > >Or if you want to be polymorphic: > >#define p1(x) ((x) + 1) These aren't higher order functions. In Doug Pase's example, plus was the higher order function, not p1. It's hard to explain what plus does to a C programmer because C can't express it. Here's a stab at explaining what plus does using a mix of Pascal and C and illegal syntax: function plus (y : number) : (function __ (__ : number): number); function p1 (x : number) : number; begin return x + y end; begin return p1 end The key thing to observe is that the function p1 must remember the value of y that was in effect when it was created, even after the plus function has returned. This is why stack-based languages like Pascal and C don't support higher order functions. Peace, Will Clinger Tektronix Computer Research Lab