[chicago-lisp] (no subject)
Damien Kick
dkixk at earthlink.net
Fri Dec 8 03:10:22 UTC 2006
On Dec 4, 2006, at 19:06, Corey Sweeney wrote:
> On 12/4/06, John Quigley <jquigley at jquigley.com> wrote:
>
> I think the general feeling is that we should remain as the Chicago
> Lisp. I'm happy with that, though I do recognize the problems
> associated with a group becoming 'pigeon-holed;' if you meet long
> enough, there's only so many topics one can discuss about a certain
> technology.
Of course, the flip side is being thinly spread over too many
things. Oh, and John, I apologize as this will duplicate a lot of
what I wrote to you in a private e-mail.
> Hmm, I'm confused. Lets establish some terminology to help clarify:
>
> Scheme is a dialect of lisp
> Common lisp is a dialect of lisp
> {emacs lisp is too}
>
> So let's use "lisp" without any further constraints to refer to the
> "family" of lisp languages.
Kent Pitman, "Lambda, the Ultimate Political Party" <http://
tinyurl.com/y5ou9j>:
> ``If they're all Lisps, presumably they're all built around some
> common core. Right?''
>
> Not necessarily. Some years ago, when I was first becoming involved
> with language standards, I did a personal study of languages in the
> Lisp family to determine whether there was a common core of
> operators that were present throughout the family with the same
> name and semantics.
In case you haven't heard of Kent Pitman before (sorry to be
repetitive if you already have), he was the editor of the ANSI
standard for Common Lisp, the effort to take what was at the time of
the start of the standardization process, any number of divergent
Lisp dialects and try to come up with something common. I think he
would be in a very good position to know how similar or not all of
those various lisp dialects where.
Corey wrote:
> Now scheme is a impure functional language (i.e. it has a "set"
> command), just like Common lisp is a impure functional language.
> I believe ML is a pure functional language. {i don't actually use
> it though, so don't quote me on that}
Scheme, from comp.lang.functional FAQ <http://tinyurl.com/yl6gln>:
> [...] in (strict) functional languages such as SML or Scheme, [...]
> it is more common to find such programs written with an explicit
> loop, often expressed recursively. Nevertheless, there is still no
> need to update the values of the variables involved: [...]
>
> Scheme:
> (define sum
> (lambda (from total)
> (if (= 0 from)
> total
> (sum (- from 1) (+ total from)))))
> (sum 10 0)
Common Lisp, from something as "general purpose knowledge" as
Wikipedia <http://tinyurl.com/zql2x>:
> Lastly, the Scheme standards documents require tail-call
> optimization, which the CL standard does not. Most CL
> implementations do offer tail-call optimization, although often
> only when the programmer uses an optimization directive.
> Nonetheless, common CL coding style does not favor the ubiquitous
> use of recursion that Scheme style prefers -- what a Scheme
> programmer would express with tail recursion, a CL user would
> usually express with an iterative expression in do, dolist, loop,
> or (more recently) with the iterate package.
"Most" Common Lispniks would write an iterative, i.e. non-functional,
version, such as the following:
(loop for i from 1 upto 10 summing i)
When the most exposure to lisp I had was the usual cursory intro from
a comparative languages course and a intro to AI course in college, I
had the impression that everything in lisp was always recursion.
Having been reintroduced by Paul Graham's ANSI Common Lisp, I was
under the impression that doing things like using setq should be done
only in emergencies. I forget how he phrases it. Something like
pretending that it incurs a cost to the function or something like
that. But that's why I'm personally glad that Peter Siebel wrote
Practical Common Lisp, as it focuses more on getting useful stuff
done, and shows quite a bit of the "just get stuff done" aspects of
the language.
Common Lisp and Scheme do come from different communities. I think
it is interesting to note that most all the many divergent lisp
dialects that were used at one time <http://tinyurl.com/y7puru>,
3Lisp, Flavors, Franz Lisp, Interlisp, Lisp 1.5, LOOPS, XLisp,
ZetaLisp, etc., have been subsumed by Common Lisp. However, Scheme
remains distinct. I think that is indicative of the differences
between the languages and the communities. But like is mentioned in
the comp.lang.functional FAQ (ibid):
> It is often possible to write functional-style programs in an
> imperative language, and vice versa. It is then a matter of opinion
> whether a particular language can be described as functional or not.
If one wants to slide far enough down the slippery slope, even C/C++
could be considered functional languages because one can write such
code without using assignment (or iteration (...)).
int sum(int from, int total)
{
if (from == 0) {
return total;
} else {
sum(from - 1, total + from);
}
}
Many C/C++ compilers support tail-call optimizations, too. However,
"most" C/C++ programmers would not write sum like this, using a for
loop instead, just like "most" Common Lispniks. Probably because
both of these languages consider tail-call optimization as a viable
optimization technique (not explicitly mentioned in the standard),
not a fundamental aspect of the language (unlike Scheme, which does
explicitly require this behavior in the standard). "Most" Schemers
would, however, use the recursive version.
Corey wrote:
> I would personally prefer having some room for non-lisp languages,
> but I would still be ok with constraining ourselfs to lisp ( i.e.
> no ML or haskel (or erlang ;) ). I would have a issue though if we
> were to constrain ourselfs to the common lisp dialect.
I personally would not have an issue with including many divergent
dialects in the lisp family. In fact, I would love it if somebody
could get Paul Graham to come talk about Arc, the newest vaporware
member of the family. I suppose I would have an issue with a lisp
group which was not cognizant of the distinctions, though.
> Question. Does Allegroserve *require* you to buy allegro common
> lisp? You might alienate some potential helpers that way.
No. There is Portable AllegroServe <http://
portableaserve.sourceforge.net/>. It works with:
> CMU Common Lisp
> Steel Bank Common Lisp
> GNU clisp (only single-threaded operation)
> OpenMCL
> Xanalys Lispworks
> MCL
> Scieneer Common Lisp (slightly broken as of 2004-02-29)
> Corman Common Lisp (with non-standard install method, might be
> broken as of 2004-02-29)
> Allegro Common Lisp
The only reason I mentioned it was that it is an entire HTTP server
in CL, as opposed to only part of it, as one would find with
something like mod_lisp. But as others have mentioned, there are
lots of other alternatives. Personally, I am looking for a lisp
group because I like lisp and don't have enough excuse to use it at
work. In fact, I think it would be sweet if we could get our hands
on an old Symbolics machine and have everything be lisp, from the raw
iron all the way up. But I'm strange like that. I don't expect a
Linux group to host its web-server on a box running something other
than Linux and I like my lisp groups to use as much lisp as possible.
Corey wrote:
> Also as I mentioned before {in person}, having just implemented a
> wiki in scheme, I would probably be able to give some guidance if
> you decide to do a wiki.
And there is CLiki <http://www.cliki.net/CLiki> and The Common Lisp
Directory <http://tinyurl.com/y3fkb6>, both written in CL.
Corey wrote:
> This is probably too big of a project, but I'll toss out the idea
> anyway. What about writing a common lisp "interpreter" in scheme?
Yeah, you're right. It probably is too big of a project. Sure, we
could knock out the basics of the language, what with lexical scoping
and closures coming for free from Scheme, and adding dynamic scoping
(special variables) in a few lines of code. Sure, CL style macros
would be a day or two at best. Pathnames, logical pathnames,
packages, and reader macros aren't even worth mentioning. CLOS would
be a week or two. A full meta-object protocol might take another
week. Maybe two. Adding CL style conditions would probably be two
weeks, maybe three tops. But doing things like getting unwind-
protect and call/cc to play well together might be a bit harder
<http://tinyurl.com/y8pl6r>.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/chicago-lisp/attachments/20061207/449771b9/attachment.html>
More information about the Chicago-lisp
mailing list