# New special form suggestion: LET-CONSTANT

```    Date: Thu, 6 Aug 1987  10:18 EDT
From: SOLEY@xx.lcs.mit.edu

Date: Monday, 3 August 1987  12:07-EDT
From: Barry Margolin <barmar at Think.COM>
...
It seems like a LET-CONSTANT special form, or an &CONSTANT lambda-list
keyword, would be the right thing for this.  LET-CONSTANT would be to
DEFPARAMETER what FLET is to DEFUN, and &CONSTANT would be analogous to
&AUX.

Yeah, and how about an &LOGOUT lambda-list keyword, to log out the current
process?  Really, although I understand the trivial difference in scope
between LET and &AUX, do we need to continue adding random lambda-list
keywords, which (worse yet) aren't keywords at all?

Oh, wow!  I don't mean to make fun of anyone, but you just gave me
a great idea for eliminating LOOP by folding it into LAMBDA.
(JONL, are you listening?  That old idea resurfaces in new syntax.)

(defun factorial (n &for j &from 1 &to n &for a &= 1 &then (* a j) &finally (return a)))

A great feature of this is that it defuses the old quibble of
whether or not LOOP "keywords" should be :-keywords by making
them be &-keywords.

We can get declarations in this way, too.

(defun factorial (n &integer n
&for j &from 1 &to n
&for a &= 1 &then (* a j)
&integer j a
&finally (return a)))

Also, let's do for English as for Lisp and replace documentation
strings.  What's sauce for the goose is sauce for the gander.

(defun factorial (n &integer n
&for j &from 1 &to n
&for a &= 1 &then (* a j)
&integer j a
&finally (return a))
&documentation &factorial &takes &a &nonnegative
&integer &n &and &returns &the &product &of
&all &positive &integers &not &greater
&than &n &.)

&Maybe &I &could &get &to &like &this &language &after &all &.

--Quux

```