## Re: Detecting Infinite Looping

 Subject: Re: Detecting Infinite Looping From: Paul Prescod Date: Tue, 03 Feb 1998 18:27:47 -0500
```I didn't see an answer to this old question. Sorry if it has come
through and I missed it.

> At 09:40 AM 1/29/98 +0000, Henry Thompson wrote:
> >PS.  You can see the tail recursion more clearly by using a named 'let'
> >
> >(define f1
> > (lambda (arg)
> >  (let loop ((x arg)
> >             (result BASE))
> >    (if P
> >      result
> >     (loop NEXT (append result (list F)))))))

W. Eliot Kimber wrote:
>
> Also, what is the significance of the lamba in the above? I've never been
> able to grasp the significance of using lamba instead of a simple let
> statement.  I know it has something to do with variable binding and scope,
> but I'm dashed as to what it is.

Lambda creates a function. These are equivalent:

(define (f1 arg) ...)

(define f1 (lambda (arg) ...)

The former syntax gets rid of the cryptic lambda, but the latter hints
at more powerful things:

(map
(lambda (foo) (* 2 foo))
(list 1 2 3 4))

This creates an anonymous function that takes one argument and doubles
it. Map applies it to the list. The result is (2 4 6 8)

> I'm the sure the problem is with name
> lambda--it means nothing to me (at least with respect to mathematics--it
> does have a political connotation, at least in the United States).

At SGML/XML 97 I pointed out the "House of Lambda" to Matthew Fuchs, a
big fan of Scheme. The name comes from the "lambda calculus" -- the
mathematical foundation of functional languages. I think it was an
arbitrary choice of a greek letter (which is typical in mathematics).
Scheme and Lisp are unfortunately littered with these historical names
("car", "cdr", etc.). Non-parenthesized functional languages seem to
have had more success choosing more meaningful names ("hd", "tl",
"func").

Paul Prescod

DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist

```