[comp.lang.scheme] What is a Scheme?

gls@THINK.COM (Guy Steele) (08/21/90)

I would like to plead for a little flexibility and tolerance in
the question of "What is Scheme?".  Scheme has evolved quite a bit
over the last 15 years and it seems to me to be too rigid to
disqualify an implementation because it lacks a few string
functions or even because it lacks CALL/CC.  That may disqualify
it from being Scheme R^3.95 or whatever, but not, in my eyes, from
belonging to the Scheme family.  The original 1975 Scheme didn't
have any string functions, but surely it may still be regarded as
a Scheme at least to the extent that Lisp 1.5 is still regarded as
a Lisp.

Allow me to offer my opinion on what makes a Scheme:

	lambda calculus, which includes:
	  variables, lexically scoped
	  lambda expressions that evaluate to first-class closures
	  combinations (i.e., function calls) with the same evaluation
	    rule used for all positions (function and arguments)

	Lisp syntax, probably
	a standard representation for programs as data, probably
	  (typically as lists and symbols)

	a means of manipulating continuations, maybe
	  (best if they are first-class)
	a primitive side effect on variables or data, maybe

I regard all other data types, including numbers and strings,
as entirely inessential to Scheme-ness.  The same goes for
control structures (I'll just synthesize DELAY and FORCE
myself from closures and side effects).

So there is one opinion.  Let's hear some others.

--Guy

jinx@zurich.ai.mit.edu (Guillermo J. Rozas) (08/22/90)

    I regard all other data types, including numbers and strings,
    as entirely inessential to Scheme-ness.  The same goes for
    control structures (I'll just synthesize DELAY and FORCE
    myself from closures and side effects).

    So there is one opinion.  Let's hear some others.

I agree.  Especially since the language is such that even numbers and
strings (and pairs, etc.) can be built out of the very powerful glue
of procedures.

The great thing about Scheme is that the glue is so good that you
hardly need anything else.  Everything else is convenience.

To me the core of Scheme is [lambda,set!,quote].

clamen@CS.CMU.EDU ("Stewart M. Clamen") (08/23/90)

   Date: 22 Aug 90 16:24:11 GMT
   From: "Guillermo J. Rozas" <snorkelwacker!ai-lab!zurich.ai.mit.edu!jinx@bloom-beacon.mit.edu>
   Organization: M.I.T. Artificial Intelligence Lab.
   References: <TED.90Aug20125352@kythera.nmsu.edu>, <9008211445.AA02571@mozart.think.com>
   Sender: scheme-request@mc.lcs.mit.edu


       I regard all other data types, including numbers and strings,
       as entirely inessential to Scheme-ness.  The same goes for
       control structures (I'll just synthesize DELAY and FORCE
       myself from closures and side effects).

       So there is one opinion.  Let's hear some others.

   I agree.  Especially since the language is such that even numbers and
   strings (and pairs, etc.) can be built out of the very powerful glue
   of procedures.

   The great thing about Scheme is that the glue is so good that you
   hardly need anything else.  Everything else is convenience.

   To me the core of Scheme is [lambda,set!,quote].

I remember asking at one of the IEEE standardization meetings whether
a Scheme-like language with no numbers other than the Wholes (Church
numerals?) could fit within the Standard.  It might have been a rush
to consolidate opinion, but I don't remember anyone else thinking it
was worth considering.


						SMC

matthias@titan.rice.edu (Matthias Felleisen) (08/23/90)

Guillermo J. Rozas writes that "since [Scheme] is such that even
numbers and strings (and pairs, etc.) can be built out of the very
powerful glue of procedures."  I disagree. Please show us how to build
numbers such that number? and procedure? work and our programs still
work, too.

I maintain that Schemeness includes untypedness, id, lambda, and
application, set!, call/cc and (whatever) datatypes (one likes) with
predicates. Indeed, I go even as far as saying that the two major
contributions of Scheme as a language are UNTYPED CLOSURES and
FIRST-CLASS CONTINUATIONS. All things in Scheme were around before but
without Scheme these two wouldn't have made it into today's
programming language world.

-- Matthias

jinx@zurich.ai.mit.edu (Guillermo J. Rozas) (08/24/90)

    Guillermo J. Rozas writes that "since [Scheme] is such that even
    numbers and strings (and pairs, etc.) can be built out of the very
    powerful glue of procedures."  I disagree. Please show us how to build
    numbers such that number? and procedure? work and our programs still
    work, too.

You did not read my message carefully.

I said "To me the core of Scheme is [lambda,set!,quote]."

It is clear that if language A is a subset of language B, all programs
written in A will run in B, while the converse need not hold.

Interpreting "core" as "essential subset", it is clear that your
objection is silly.  Any program that I write with [lambda,set!,quote]
will run in "full" Scheme.  

You are criticizing my core because the converse does not (may not)
hold, ie., for not supporting the whole language, but that was never
the intent.  

You don't need to dig into discriminating between zero and false, and
the empty list (although discussion from another mailing list should
tell you that I don't mind not being able to distinguish between them)
to find issue with my core.  I did not include
call-with-current-continuation nor conditionals yet I cannot define
them on top of my core, and I don't intend to program in continuation
passing style all the time, which is, _essentially_, the only way to
get the functionality out of it.

GLS asked for opinions about what "a Scheme" would be.  I gave mine.
Neither I nor GLS (if I understand his message correctly) attempted to
answer what made IEEE draft Scheme IEEE draft Scheme or R^3.9* Scheme
R^3.9* Scheme.  The answer is straight-forward: the full requirements
of the corresponding document.

matthias@leto.rice.edu (Matthias Felleisen) (08/24/90)

In article <JINX.90Aug23190740@chamarti.ai.mit.edu> jinx@zurich.ai.mit.edu writes:
>
>    Guillermo J. Rozas writes that "since [Scheme] is such that even
>    numbers and strings (and pairs, etc.) can be built out of the very
>    powerful glue of procedures."  I disagree. Please show us how to build
>    numbers such that number? and procedure? work and our programs still
>    work, too.
>
>You did not read my message carefully.
>

1. I responded to your claim that numbers which as far as I am
concerned includes number? can be written in your "Scheme core". I am
happy to see that you know that this is impossible. 

2. The original question was "what is a Scheme". I answered to this
question and interpreted it as "what is the essence of Scheme". I
agree that one could interpret the question as "what is the part of
Scheme that is most interesting to you". As far as I am concerned and
as I mentioned before, the most interesting things about Scheme are
call/cc and first-class continuations.

-- Matthias

jinx@ALTDORF.AI.MIT.EDU ("Guillermo J. Rozas") (08/28/90)

    1. I responded to your claim that numbers which as far as I am
    concerned includes number? can be written in your "Scheme core". I am
    happy to see that you know that this is impossible. 

Thank you for your blessing! :-)

It depends on what you mean by impossible.  It is straight forward to
implement number?, procedure?, etc., as long as you are willing to
follow some simple constraints.  In particular, the constraints are so
trivial that they can be built into the syntactic transducer that will
handle IF, LET, etc. for you, so I'm not sure that I agree that it is
impossible as opposed to merely awkward.

    2. The original question was "what is a Scheme". I answered to this
    question and interpreted it as "what is the essence of Scheme". I
    agree that one could interpret the question as "what is the part of
    Scheme that is most interesting to you".

Isn't that a possible interpretation of the word "essence"?

matthias@RICE.EDU (Matthias Felleisen) (08/28/90)

Hi! My original posting said that my existing programs should work.
This is the constraint that is crucial: you cannot express
number?/procedure? if you accept that condition. Think about it. The
proof of this claim is contained in my paper on expressiveness that I
advertised (modulo some formalism). As you know, if you admit
unrestricted classes of translations you can always encode programs as
some basic data (quote/cons, numbers) and interpret/compile&eval them.
The classes of translations in which you think you can satisfy my
claim can do that. Your statement is therefore "without teeth", i.e.,
not very meaningful.

If we interpret "essence" as what we like best, we don't have a
dialogue but only a debate. What I like best is based on emotions,
what is absolutely crucial to the language (in the above sense) is a
formal statement and can be discussed (e.g. which classes of
translations are interesting for what reason). I prefer logical
discussions over emotional debates (the latter are useless for me as a
language researcher) but am willing to do both (South Germans are
hot-blooded, too :-) ).

-- Matthias

gls@THINK.COM (Guy Steele) (08/29/90)

   Date: Tue, 28 Aug 90 10:15:17 CDT
   From: Matthias Felleisen <matthias@rice.edu>
   ...
   If we interpret "essence" as what we like best, we don't have a
   dialogue but only a debate. What I like best is based on emotions,
   what is absolutely crucial to the language (in the above sense) is a
   formal statement and can be discussed (e.g. which classes of
   translations are interesting for what reason). I prefer logical
   discussions over emotional debates (the latter are useless for me as a
   language researcher) but am willing to do both (South Germans are
   hot-blooded, too :-) ).

Einen geschenkten Gaul sieht man nicht im Maul.

--Der Grossquux