Talk:Scheme (programming language)
From Wikipedia, the free encyclopedia
[edit] Hygienic macros
Hi. The following text was found in Hygienic macro, but I don't know enough about Scheme to integrate properly. Please could someone else handle this:
Scheme macros:
- Transforms derived expression types into primitive expression types.
- During expansion, no evaluation ? rewrites one pattern of code into another.
- May use macros if we want to ommit Scheme?s call by value evaluation
--DJ Clayworth 15:28, 21 Nov 2003 (UTC)
- It is unfortunate that hygienic macro redirects to Scheme programming language where there's only little information on the subject. --MH 15:29, 16 Mar 2004 (UTC)
[edit] Scheme advantages
Most of the advantages listed stem from more general design decisions than that of Scheme in particular:
- Concerning syntax it's a feature of all Lisps (well, except for the very first design of Lisp which did not use S-exprs)
- Concerning the functional aspect, it is as the name suggests common to all functional languages.
I've therefore added in the section what these advantages stem from. --Sam 00:15, 11 Aug 2004 (UTC)
[edit] Evolution of scheme
Two sections, Disadvantages of Scheme and Standards, talk about official and community standards, but in a rather unenlightening way. A brief history of scheme should be written, covering the nature of the RnRS process, the status of the IEEE standard, the reasons for doubting there will ever be an R6RS, and why the SRFI process was created and what has been going on with it.
I propose a rewrite of these two sections, with a new section "Evolution of Scheme" as the first numbered section that covers the above. Any objections to me diving in and doing that? --Charles Stewart 09:01, 12 Aug 2004 (UTC)
- That's fine with me. Make sure that you do describe the percieved advantages and drawbacks of Scheme, especially compared to other dialects of Lisp (since its advantages and drawbacks as a whole are largely those of Lisp). It may also be interesting to explain how the drawbacks are addressed. --Sam 20:42, 13 Aug 2004 (UTC)
[edit] Toki Pona?
I am not the one who originally deleted the link to Toki Pona, but after checking it, there is no Scheme code on that page contrary to what the section title claims. In fact it does not have anything to do with Scheme. Therefore I have removed the link. Is there any good reason to link to that article that I have missed? --Sam 04:47, 27 Aug 2004 (UTC)
[edit] Disjointness of types
A point: while the current scheme standards assert that the types are disjoint, and in particular that #f and '() are distinct, this has only been the case since the IEEE standard and R4RS. R3RS permitted these two to be the same, and MIT scheme had this equality. This comment is provoked by this edit. --Charles Stewart 14:54, 15 Oct 2004 (UTC)
[edit] Outdated?
- "The Scheme community is highly fragmented, with dozens and dozens of implementations, and without a dominant implementation it has proven difficult to focus developer support on providing adequate libraries for practical work. (For example, Python has over 100 extension libraries written in C, and many more in pure Python.)"
- "For this reason, Scheme is often considered to be a "toy" language, unsuited for production use since too much time is needed to re-invent the wheels, though one very well suited for educational purposes. A dominant, open source implementation is badly needed to remove this stigma."
Really? There's PLT and Chicken, among others very high quality free implementations. I'd pick Chicken over Python any day of the week. "filesystem access, a socket interface, HTML processing," all these are readily available these days.
I can agree that there needs to be some disadvantages listed but all of the listed things are things that are currently false, since:
- The SRFI's have been successful
- There are adequate libraries for practical work
- Scheme isn't just a toy language (even though it's often viewed as one)
The namespace thing.. yes, some people do see that as a disadvantage; others see it as a huge advantage. A short note should be made that these two sides exist, with discussion moved to another page.
Real disadvantages:
- has a reputation as a toy language - even if it's not one, that's the reputation
- is very different from mainstream algol-like languages (it's imho easier, but opinions differ on that)
- is popular with academia and cs and other hopeless geeks
Maybe CL-folks could list some disadvantages that scheme has? otoh I've never seen any CL folks with a good understanding of scheme.
- I dropped the latter offending paragraph, since it was accusatory, POV, and not in encyclopedic style. (It is not Wikipedia's business to tell other people what is "badly needed".) Please feel free to contribute accurate information directly to the article -- be bold in editing. :) --FOo 01:33, 7 Mar 2005 (UTC)
-
- This article should mention SIOD.
[edit] Cryptic tail-recursive factorial example
Hi, I was just reading the article out of curiosity. I really liked most of the article and actually became interested in learning the language. I don't know how to program in scheme or any lisp dialect for that mater. I am not a CS major, but am not computer illiterate either. I program in other languages like C, Objective-C, perl, and php just for fun. I was trying to follow the tail-recursive example and was completely unable to do it and I don't feel is my fault. I believe that a few comments on the code and perhaps explaining what do the "let loop" expression and the "do statement" do instead of vaguely mentioning that they are "syntactic sugar" could help. I would write them myself but as I said, unfortunately I don't know how to program in scheme.
I don't know the specifics of the rest of the discussion, but I really liked the article aside from these rough edges, Good Job!!
- The "named
let
" form sets up a local subroutine, here calledloop
. This routine has two local variables, calledfact
andn
. (I'd call themtotal
anditer
or some such, but whatever.) Inside this subroutine, you can think of a tail-call toloop
as just a GOTO back up to the top of the namedlet
, only with these variables modified.
- One of the lessons to learn from Scheme is that if you can assume tail-call optimization, then a tail-recursive call is just a GOTO with arguments, and is just as efficient (while still being a lot more readable). --FOo 05:23, 21 Jun 2005 (UTC)
-
- I just cleaned up (IMHO!) the examples a little. What do you think now? --FOo 05:41, 21 Jun 2005 (UTC)
- I agree. I think the example of tail recursion is opaque. I only understood the idea after I did many examples for myself. Even now I barely understand how it works and have to reference tail recursive code to get an idea of the syntax.
[edit] Historical revisionism
Isn't the following claim in the 1st paragraph of the article (boldface mine) revisionist?
- "Scheme is a functional programming language and a dialect of Lisp. It was developed by Guy L. Steele and Gerald Jay Sussman in the 1970s initially as an attempt to understand the Actor model and introduced to the academic world via a series of papers now referred to as Sussman and Steele's Lambda Papers."
From Structure and Interpretation of Computer Programs, available online [1] the most complete historical account that I was able to find on a moment's notice follows:
- "Scheme, the dialect of Lisp that we use, is an attempt to bring together the power and elegance of Lisp and Algol. From Lisp we take the metalinguistic power that derives from the simple syntax, the uniform representation of programs as data objects, and the garbage-collected heap-allocated data. From Algol we take lexical scoping and block structure, which are gifts from the pioneers of programming-language design who were on the Algol committee. We wish to cite John Reynolds and Peter Landin for their insights into the relationship of Church's lambda calculus to the structure of programming languages. We also recognize our debt to the mathematicians who scouted out this territory decades before computers appeared on the scene. These pioneers include Alonzo Church, Barkley Rosser, Stephen Kleene, and Haskell Curry."
I have been unable to document the claim that Scheme is in some way indebted to the Actor model (I have two refereneces Kent Dybvig's book and Abelson and Sussman. I find the claim strange, since I have used scheme and T and recognize its heritage, but the actor model I didn't think was one of the predecessors, particularly of such prominence. I will believe the claim, however, if someone provides a reference. --CSTAR 21:19, 10 July 2005 (UTC)
- The review paper The Evolution of Lisp by Guy L. Steele, Jr. himself and Richard P. Gabriel claims
- "The dialect of Lisp known as Scheme was originally an attempt by Gerald Jay Sussman and Steele during Autumn 1975 to explicate for themselves some aspects of Carl Hewitt's theory of actors as a model of computation."
- (From section 2.8 Scheme 1975–1985.) -- Tobias Bergemann 13:17, July 11, 2005 (UTC)
-
-
- This statement is indeed correct, but nevertheless, I still think it is misleading (and revisionist) to mention the actor model in the second sentence. It's fine to mention it, but in a more nuanced history section further down, where other relevant ancestors are also mentioned. Particularly, since no mention is made in the intro on continuations, which is really the essential point of why scheme was developed to understand actors, as is evident a few lines down from the quote you provided:
-
-
-
-
- "Functional interactions were modeled with the use of continuations; one might send the actor named “factorial” the number 5 and another actor to which to send the eventually computed value (presumably 120)."
-
-
-
-
- Continuations as first-class objects is one of the distinguishing characteristics of scheme. --CSTAR 15:01, 21 July 2005 (UTC)
-
-
-
-
- Hm, "misleading" and "revisionist" are strong words, but I agree that the goals driving the original conception of Scheme (understanding the actors model) are far removed from the goals driving the later development of Scheme, and the very first paragraph of an entry on Scheme in an encyclopedia should probably describe the status quo of Scheme rather than the reasons for its creation. That being said I think that the first five paragraphs of this entry taken together already provide a quite balanced overview of the features and roots of Scheme.
- (I also agree that continuations as first-class objects is an important characteristic of Scheme, but its inclusion in Standard Scheme was and remains a topic that is controversially discussed amongst the editors of RnRS. First-class continuations are mentioned in the third paragraph right after the lexical scoping that was adopted from Algol. Algol was probably as strong an influence in the early development of Scheme as the actor model.) --Tobias Bergemann 09:53, 22 July 2005 (UTC)
-
-
-
-
-
-
- (I finally found the reference I was originally looking for w/r/t Scheme's original conception and its relation to the actor model. In his 2002 essay Objects have not failed, Guy L. Steele, Jr. writes:
-
-
-
-
-
-
-
-
- "The Scheme programming language was born from an attempt in 1975 to explicate object-oriented programming in terms that Gerry Sussman and I could understand. In particular, we wanted to restate Carl Hewitt's theory of actors in words of one syllable, so to speak. One of the conclusions that we reached was that "object" need not be a primitive notion in a programming language; one can build objects and their behavior from little more than assignable value cells and good old lambda expressions. Moreover, most of the objects in Hewitt's theory were stateless and unchanging once created; for those, lambda expressions alone were sufficient."
-
-
-
-
-
-
-
-
- This was the reference I had originally wanted to provide, but could not find at the time, so I quoted the Evolution paper above. Another reference more relevant to the later development of Scheme is the archives of the RnRS authors' mailing list from 1984 onwards.) --Tobias Bergemann 12:39, 22 July 2005 (UTC)
-
-
-
[edit] Introduction
The intro currently reads:
- "Scheme is a functional programming language and a dialect of Lisp. It was developed by Guy L. Steele and Gerald Jay Sussman in the 1970s initially as an attempt to understand the Actor model and introduced to the academic world via a series of papers now referred to as Sussman and Steele's Lambda Papers."
- "Scheme's philosophy is unashamedly minimalist. Its goal is not to pile feature upon feature, but to remove weaknesses and restrictions that make new features appear necessary. Therefore, Scheme provides as few primitive notions as possible, and lets everything else be provided by libraries that are built on top of them (or using extra functionality in various implementations). For example, the main mechanism for governing control flow is tail recursion. (Some people refer to Scheme as a family of related languages, each defined by some implementation.)"
I'd like to rewrite this to remove the necessity for the two parenthetical statements. Here's my first draft for a rewrite:
- "Scheme is a functional programming language and a dialect of Lisp. It was developed by Guy L. Steele and Gerald Jay Sussman in the 1970s initially as an attempt to understand the Actor model and introduced to the academic world via a series of papers now referred to as Sussman and Steele's Lambda Papers. Minor implementation details tend to differ slightly, so sometimes Scheme is referred to as a family of closely related programming languages."
- "Scheme's philosophy is unashamedly minimalist. Its goal is not to pile feature upon feature, but to remove weaknesses and restrictions that make new features appear necessary. Therefore, Scheme provides as few primitive notions as possible, and where this is practical in an implementation, tends to let everything else be provided by libraries that are built on top of them. For example, the main mechanism for governing control flow is tail recursion." --Tony SidawayTalk 12:21, 29 August 2005 (UTC)
- Please add *some* text instead that makes it clear that Scheme programmers do not start every project by writing the things that you get for free elsewhere. This is exactly how the paragraph sounds, and a very common (and very stale) anti-CL propaganda line.
-
- Goodness, no they don't! I'm writing my current project using seven scheme modules. What *is* true is that implementations differ somewhat. For instance, I would have to (and probably will) do a considerable amount of work to make my code work on most widely used implementations of scheme. --Tony SidawayTalk 19:33, 30 August 2005 (UTC)
[edit] Explanation of Tony Sidaway's revert of an edit by 24.128.49.163
In an edit at 20:34, 2 October 2005, 24.128.49.163 (talk • contribs) made the following changes:
1. "Some people are at first put off by all the parentheses used in Scheme notation." -> "Many people are put off by all the parentheses used in Scheme notation.
2. "after a short period of accommodation the parentheses become unobtrusive" -> "after a period of accommodation the parentheses supposedly become unobtrusive"
3. Addition of two paragraphs describing the syntax of Scheme as "cryptic and unintuitive...therefore relatively hard to learn" Claiming that Scheme program execution speed is limited to "a fraction of the speed of programs written in a modern compiler language." by the mode of implementation. Claiming that the use of Scheme as a good introductory language for computer science is "a myth [that] has been debunked."
Point 1 seems incorrect and ignores the learning curve.
Point 2 is weaseling, "supposedly".
The syntax of Scheme is as a matter of fact on of the simplest of any programming language. The assumption that Scheme cannot be compiled is simply incorrect. No support is given for the claim that the utility of Scheme for introductory computer science has been "debunked."
I have therefore reverted. --Tony SidawayTalk 21:21, 2 October 2005 (UTC)
- Yeah, the anon user's edit is an obvious troll. --Neilc 22:30, 2 October 2005 (UTC)
[edit] Advantages/Disadvantages
These sections are POV, not to mention unsourced and very subjective. It reads like point->counter-point, where the last counter-point ends up being pro-scheme and in some cases anti-lisp. The disadvantage section itself is more like a "debunking disadvantages" section and it's funny that it's tiny in comparison to the advantages section anyway. I'm not even sure how things like curly/square brackets are an "advantage" over anything. Plus I question adding an "advantages" section in general to any programming language article. Most don't have a "advantages" section and for good reason, because you're not actually comparing it to anything except "every other programming language in existence," which isn't helpful. Nathan J. Yoder 05:42, 19 October 2005 (UTC)
[edit] "Always built on"
The hygienic macro system is always built on some low-level facility which provides the full power of non-hygienic macros, including arbitrary syntax-time computations.
What does this mean? That every single Scheme implementation provides unhygienic macros in some way?
- good catch, I'll change it to "usually". Sunnan 07:28, 18 December 2005 (UTC)
[edit] Scheme tools on Wikipedia
As I enjoy programming in Scheme I'm employing that language in writing tools for Wikipedia. The first tool is one that measures the degree of vandalism on popular articles on various Wikipedias by examining edit summaries to recognise probable reverts of vandalism. At the time of writing it recognises vandalism reverts on the English, German, French and Spanish Wikipedias. --Tony Sidaway|Talk 02:49, 27 December 2005 (UTC)
[edit] Implementations links
A lot of the links in the Implementations section seem more like ads than encyclopedia citations. That section looks a bit like a WP:SPAMHOLE; cleanup would be good. —donhalcon╤ 04:01, 3 March 2006 (UTC)
- Perhaps it would be a good idea to clean up Category:Scheme compilers and just link to that rather than having a huge list of ad-like links. —donhalcon╤ 04:07, 3 March 2006 (UTC)
-
- There are interpreters, compilers, bytecode compilers, image-based bytecode compilers and probably stranger things... It might be better to make a Comparison of Scheme Implementations with a very small set of criteria (OSs, type (compiled &&|| interpreted &&|| bytecode), standard) Quamaretto 18:16, 20 March 2006 (UTC)
[edit] pronounciation of car and cdr
It would be really cool to upload sound files for the pronounciation of car and cdr. Anyone know how to do this? Ideogram 10:39, 28 May 2006 (UTC)
I have done this. It is way cool. Ideogram 06:10, 4 June 2006 (UTC)
[edit] box and pointer diagram
It would be nice to add a box-and-pointer diagram to the explanation for how lists are composed of cons cells. Ideogram 10:40, 28 May 2006 (UTC)
I have done this. Ideogram 06:10, 4 June 2006 (UTC)
[edit] ports
Can more be said about ports? I am not familiar with them. Ideogram 23:14, 29 May 2006 (UTC)
There is not much to be said about ports that is not already said in the article. Quoting R5RS: "Ports represent input and output devices. To Scheme, an input port is a Scheme object that can deliver characters upon command, while an output port is a Scheme object that can accept characters." read
and write
and the other I/O operations of Scheme operate on ports. They more or less correspond to istream and ostream of C++. — Tobias Bergemann 12:14, 31 May 2006 (UTC)
- How about adding this sentence: "current-input-port and current-output port correspond to the common Unix notions of stdin and stdout." Ideogram 12:53, 31 May 2006 (UTC)
-
- That would not be strictly correct, I think:
current-input-port
andcurrent-output-port
need not return the port objects corresponding tostdin
andstdout
at all times. Within the dynamic scope ofwith-input-from-file
orwith-output-to-file
a call tocurrent-*-port
would return the port object corresponding to the respective file. — Tobias Bergemann 13:32, 31 May 2006 (UTC)
- That would not be strictly correct, I think:
-
-
- Stdin and stdout in unix can be redirected. Are you saying scheme's mechanism for this is different? Ideogram 16:44, 31 May 2006 (UTC)
-
-
-
-
- No, you are right. I had forgotten about redirection. — Tobias Bergemann 07:11, 1 June 2006 (UTC)
-
-
[edit] strongly typed?
how is scheme strongly typed (infobox)? Ideogram 17:43, 30 May 2006 (UTC)
- The terminology wrt. strongly/weakly typed and statically/dynamically typed is somewhat confusing and not used consistently among different authors. As far as I can see, most contemporary authors that care about terminology at all would call Scheme strongly, dynamically typed. Haskell would be an example of a programming language that is strongly, statically typed, and C would be an example of a programming language that is weakly, statically typed. (See type system.) — Tobias Bergemann 21:34, 30 May 2006 (UTC)
-
- The articles for Lisp and Common Lisp don't describe them as strongly typed, only dynamically typed. Ideogram 22:30, 30 May 2006 (UTC)
-
- From strongly-typed programming language: Common Lisp has a complex, fine-grained system of data types, but is almost entirely dynamically typed.
-
- Schme has a number tower (terminology?) by which most arithmetic operations between numbers of different machine representations are inferred. Ideogram 22:35, 30 May 2006 (UTC)
-
-
- As I understand contemporary terminology, a programming is called strongly typed if type errors cannot go unnoticed. A programming language is called dynamically typed if type errors are (mostly) detected at run time, and statically typed if type errors are (mostly) detected at compile time. Using these definitions Scheme (and Common Lisp, and Smalltalk, and Python etc.) are certainly strongly typed.
-
-
-
- However, as I said, the terminology is not used consistently within the literature. Even the Scheme standard document R5RS says: "Scheme has latent as opposed to manifest types. Types are associated with values (also called objects) rather than with variables. (Some authors refer to languages with latent types as weakly typed or dynamically typed languages.) Other languages with latent types are APL, Snobol, and other dialects of Lisp. Languages with manifest types (sometimes referred to as strongly typed or statically typed languages) include Algol 60, Pascal, and C."
-
-
-
- Even more confusing is that some authors apparantly restrict the term "type error" to mean type errors that are detected at compile time.
-
-
-
- The paper On Understanding Types, Data Abstraction, and Polymorphism by Luca Cardelli and Peter Wegner says: "Programming languages in which the type of every expression can be determined by static program analysis are said to be statically typed. Static typing is a useful property, but the requirement that all variables and expressions are bound to a type at compile time is sometimes too restrictive. It may be replaced by the weaker requirement that all expressions are guaranteed to be type-consistent although the type itself may be statically unknown; this can be generally done by introducing some run-time type checking. Languages in which all expressions are type-consistent are called strongly typed languages. If a language is strongly typed its compiler can guarantee that the programs it accepts will execute without type errors. In general, we should strive for strong typing, and adopt static typing whenever possible. Note that every statically typed language is strongly typed but the converse is not necessarily true." This view is at least consistent with that expressed on type system. — Tobias Bergemann 07:40, 31 May 2006 (UTC)
-
-
-
-
- Ok I'll put strongly typed back in, unless anyone else has an opinion. Ideogram 11:55, 31 May 2006 (UTC)
-
-
Please see the programming language talk page for more discussion of this issue. Ideogram 14:04, 31 May 2006 (UTC)
I think this article needs more information about the data types available in scheme. I have been using this page as a scheme reference whenever I am coding; the lack of mention of vectors is something that specifically bothers me. 24.61.12.141 01:42, 10 July 2006 (UTC)
[edit] Fair use rationale for Lambda.png
Where does this image come from? We need a fair use rationale if we are to continue using this image. Otherwise, it will have to be removed. Ideogram 22:55, 3 June 2006 (UTC)
[edit] why was cdr.ogg deleted?
Why delete cdr.ogg? This is a different sound file. Ideogram 08:02, 7 June 2006 (UTC)
[edit] GA on hold granted
The only necessary thing to change for the GA status is:
- Why are there parenthesis around the coding in this language? Is this typical to languages or to Lisp-like languages... it should be mentioned.
- Added an explanatory word to the link that explains this. Ideogram 03:41, 24 June 2006 (UTC)
The next items will need to be addressed or changed in order to become a FA :
- The latest RnRS version is R5RS, also available online. should be removed as there is no time in an encyclopedic entry.
- Done. Ideogram 03:41, 24 June 2006 (UTC)
- Dates and expansion needed for the Origin section.
- Redlinks recovery needed.
- Done. Ideogram 06:15, 24 June 2006 (UTC)
- Inline external citations should be placed in the Reference section.
- Their current progress can be found on the web. shouldn't be placed in the text but in a further reading section.
- Just removed it since it is already in the External links section. Ideogram 06:22, 24 June 2006 (UTC)
- Not sure if the Implementations section is really needed, it looks like hidden advertisement. If needed then trimming is required.
- Removed. Ideogram 06:25, 24 June 2006 (UTC)
- Bigger blocks of code should be placed and then explained like the Function section :
Functions are first-class objects in Scheme. They can be arguments to other functions and be returned by them. They can be assigned to variables. For example a function with two arguments arg1 and arg2 can be defined as
(define fun (lambda (arg1 arg2) ...))
which can be abbreviated as follows:
(define (fun arg1 arg2) ...)
Functions are applied with the following syntax:
(fun value1 value2)
Note that the function being applied is in the first position of the list while the rest of the list contain the arguments. The apply
function will take the first argument and apply it to a given list of arguments, so the previous function call can also be written as
(apply fun (list value1 value2))
- should become :
1 (define fun (lambda (arg1 arg2) ...))
2 (define (fun arg1 arg2) ...)
3 (fun value1 value2)
4 (apply fun (list value1 value2))
Functions are first-class objects in Scheme. They can be arguments to other functions and be returned by them. They can be assigned to variables. For example a function with two arguments arg1 and arg2 is defined in line 1 and line 2 is an abbreviation of it. Line 3 shows how functions are applied. Though it should be noted that the function being applied is in the first position of the list while the rest of the list contain the arguments. The apply function will take the first argument and apply it to a given list of arguments, so the previous function call can also be written as seen on line 4.
Nice article though that I would like to see more written like prose than a list or coding. Lincher 00:32, 24 June 2006 (UTC)
- Nice work. Given the GA status. Lincher 05:14, 24 June 2006 (UTC)
[edit] Featured article status: citations needed
Now that we have Good article status, to reach Featured article status the main obstacle is the lack of citations. I have tagged all the statements that need citing. Ideogram 15:01, 26 June 2006 (UTC)
- http://www.cliki.net/Scheme will help with most of the references -- Solberg 09:00, 11 July 2006 (UTC)Solberg
[edit] Implementations
The info box is supposed to contain "major" implementations. I have trouble believing that all of the implementations listed are "major". --Ideogram 21:56, 1 August 2006 (UTC)
[edit] Requested move
Scheme programming language → Scheme (programming language) – Conformance with WP naming conventions LotLE×talk
The page was moved. Move discussion is here: Wikipedia talk:WikiProject Programming languages/Renaming poll
[edit] Well-know to be used for...?
I would have expected to see some hint as to where it's most used currently - embedded systems? teaching children? e-commerce sites? games programming? networked clusters? - I would guess that people exist that would argue that it's The Best Language for all of the above, but where is is Actually Used Most.... --Snori 06:48, 14 September 2006 (UTC)
- GNU Robots? :p ¦ Reisio 14:39, 14 September 2006 (UTC)
-
- Scheme is used the most for preparing students in computer science (Berkeley, MIT, etc use Scheme) and AI research from what I know. Lisp is definitely more popular for AI though. -- Solberg 01:04, 15 September 2006 (UTC)Solberg
-
-
The article mentions its use as an extension language - GIMP being esp. notable in this regard.Actually, it doesn't - it only mentions Guile in passing. Oops! Maybe it should? -- Gwern (contribs) 03:52, 15 September 2006 (UTC)
-
- A bunch of users/projects with Wikipedia articles: Adamantix, Festival, GnuCash, LilyPond, Naughty Dog, Sawfish, Siag Office, Stratagus, Ximian Evolution
- There are more on the Scheme Wiki's What is Scheme used for? FAQ. --Piet Delport 14:17, 15 September 2006 (UTC)
-
- Are you sure about the Adamantix one? The article doesn't mention it, and I did a Google search on their site for "Lisp" or "Scheme" and came up with nothing. Also, that FAQ doesn't list it.
- A search on the Stratagus article and site both claim that it uses Lua and not Scheme/Guile as well. -- Gwern (contribs) 18:06, 16 September 2006 (UTC)
-
-
- Further in that vein, our Naughty Dog article says GOAL was written in Allegro Common Lisp - not Scheme. -- Gwern (contribs) 18:15, 16 September 2006 (UTC)
-
-
-
-
- Adamantix i got from #scheme. Quoting their How to contribute page: "The language of choice for the Adamantix project is Chicken Scheme. [...]"
- The remaining projects are just the entries on the Scheme wiki that i recognize, and that have Wikipedia articles, so i don't know to what extent they actually use Scheme. (A bit of googling found this article by one of the Naughty Dog developers, though, which seems to indicate that GOAL itself was a Schemish language which was compiled to (and using) Allegro Common Lisp.) --Piet Delport 23:34, 19 September 2006 (UTC)
-
-
-
-
-
-
- GOAL should probably be omitted. "Yes, Goal looks a little scheme-like, and yes, it was developed
-
-
-
to compile on Allegro CL." is hardly resounding support for chalking that one up to Scheme - just looking a little like it is a far too weak criterion to use. -- Gwern (contribs) 23:54, 19 September 2006 (UTC)
[edit] Odd object orientation example?
I do not understand the object orientation bit - I see that as mostly an example of regular (transparent) data structures, but the example shows no encapsulation, polymorphism, classes (not really required), only a little object and method call/message passing style.
For it to be "object oriented", I'd expect some kind of behaviour being stored in the Billy the cat (in a prototype-oriented fashion), mabye a lambda expression which given a cat as a reference print meows 'age' times. I don't want to start a full debate over what object orientation is (the Wikipedia topic is fine), but I think the otherwise good article could be improved this way (and it's been a while since I last Schemed, so...)
--Jespersm
- That is an odd example. Normally OO in scheme is implemented with the objects being closures that take a message name as an argument and return a method. For example:
(define (make-cat name) (lambda (message) (case message ((say-name) (lambda () name)) ((set-name) (lambda (new-name) (set! name new-name))) (else (error "Bad message sent to a cat"))))) (define bill (make-cat "Bill")) (display ((bill 'say-name))) (newline) ((bill 'set-name) "George") (display ((bill 'say-name))) (newline)
- You can find examples of this sort of thing in Structure and Interpretation of Computer Programs [2] and Scheme and the Art of Programming. Kleg 21:12, 19 September 2006 (UTC)
-
- Thanks -- my hunch was right, if poorly worded. I'm not sure I'm a bold enough Schemer to improve the entry, though. Jespersm 18:13, 20 September 2006 (UTC)
[edit] Implementations
Why was the implementations section removed? —The preceding unsigned comment was added by 87.7.171.59 (talk • contribs).