[net.applic] recursion -- from net.lang

srlm@ukc.UUCP (S.R.L.Meira) (08/16/83)

	The article below was posted by Joe Fasel in net.lang, last April.
	I'm posting it again (hope Joe doesn't mind) to net.applic, both
	to test our (uk+europe) net.applic connection and to tell "applic"
	subscribers what was happening elsewhere (a long time ago). It
	also serves as an invitation to all of you to POST NEWS TO NET.APPLIC
	(We haven't seen anything there for ages !!...)

	silvio lemos meira --- srlm@ukc


--------------------------------------------------------------------------------
From lime!houxg!hogpc!houxm!npoiv!npois!hou5f!ariel!vax135!floyd!cmcl2!lanl-a!jhf Wed Apr 20 14:30:17 1983
Full-Name: 
Newsgroups: net.lang
Subject: Re: {Re:}* Recursion
Article-ID: net.lang/75
--------------------------------------------------------------------------------

Yes indeed, probably the most natural way to define the factorial function
is as the product of the integers 1 through n.  I think one sees the
the version

	fact(n) = if n=0 then 1 else n*fact(n-1)

so often not because it is the best way to define factorial, but because
it is one of the simplest functions by which to demonstrate recursion.

Take a look David Turner's (U. of Kent at Canterbury) language KRC.
In it, one can write (I may not have the syntax exactly right.)

	fact n = product [1..n]

after defining

	product L = reduce times 1 L

where

	reduce f ident nil = ident
	reduce f ident x:L = f x (reduce f ident L)

The ":" denotes the pairing operation, like Lisp cons.  The  ".." notation
is a shorthand for constructing lists (possibly infinite) of consecutive
integers.  Turner says it has proved useful for eliminating the sort
of "junk recursion" we see in the first implementation of fact, above.

I have probably mucked up this example, although I think I have the spirit
of it right.  Any comments from folks at ukc?

Joe Fasel
Los Alamos National Laboratory
{ucbvax!lbl-csam | pur-ee!purdue | harpo!floyd!cmcl2}!lanl-a!jhf
JFasel@LANL