which lisp book ?
Kenny Tilton
ktilton at nyc.rr.com
Sun Oct 12 18:04:10 EDT 2003
Wow. Great essay. If you are new to Lisp, I have to say you must be a
very quick study. I was also going to pester you about adding your name to:
http://alu.cliki.net/The%20Road%20to%20Lisp%20Survey
...when I realized your name looked familiar. :)
I was wondering why no one had yet offered Norvig's piece to the OP:
http://www.norvig.com/python-lisp.html
But yours seems a lot more substantive.
kenny
Karl A. Krueger wrote:
> Santanu Chatterjee <santanu at softhome.net> wrote:
>
>>So, what's so common between python and lisp? To me (I know
>>absolutely nothing about lisp) they sure seem _very_ different.
>
>
> I'm rather new to Lisp still, but I find it interesting to draw up a
> list of some of the similarities and differences I've found, also
> coming from a Python background. Please don't take this as a
> statement by either a "Lisper" or a "Pythonisto" -- I'm just a
> security systems administrator who uses Python regularly and is trying
> to understand Lisp as well ....
>
>
> They're both multi-paradigm languages with strong functional and
> object-oriented tools, introspection, and an interactive prompt
> (read-eval-print loop). They're both "practical" languages which,
> while they incorporate a lot of thought from computer science
> research, are intended for "real-world" programming.
>
> They both have syntaxes which confuse people used to languages like
> C and Java. (That said, their syntaxes are very different from one
> another.)
>
> They are both rather strong at dealing with complex data structures,
> more so either than low-level languages like C or text-processing
> languages like Perl. Likewise, they both have a lot of data types
> built into the language, rather than as add-on libraries -- diverse
> numeric types, hash tables, lists, and so forth.
>
> Both support higher-order functions and lexical scoping; thus, both
> can support (e.g.) closures.
>
> Both are strongly but dynamically typed. Lisp allows the programmer
> to specify types of function arguments, which serve as an optimization
> aid to the compiler. Likewise, both have automatic memory management
> (garbage collection) and separate the user from having to deal with
> the explicit allocation of memory.
>
>
> Someone coming to both from the direction of C, Perl, or Visual Basic
> is likely to see a lot of similarities, despite the blatant visible
> syntax differences. That said, they have a lot of differences aside
> from syntax, too.
>
> In the object-oriented space, Python is a single-dispatch language
> (methods are defined on classes) while Lisp is a multiple-dispatch
> language (methods are defined on tuples of argument types). Python is
> also pervasively object-oriented (just about every variable can be
> treated as an object, has methods, and so forth) while Lisp isn't.
>
> Lisp uses classes as a more powerful sort of structure definition.
> Python uses classes as a general-purpose construct, serving the
> purposes of Lisp classes and structures as well as some of the roles
> for which Lisp uses symbols. (Or, put another way, Python classes are
> a lot like Lisp symbols -- they have identity, can carry around
> properties, can stand for callable functions, are used for exceptions,
> and so forth. They _also_ serve the purpose of classes in OOP.)
>
> Neither language supports strenuous OOP access control of the sort
> found in C++; if you can name a data element of an object, you can
> access it and change it. (This drives some OOP ideologues batty.)
>
> Lisp has an immensely powerful macro system which allows programmers
> to define new syntactical constructs. Python has a clear distinction
> between syntax and user functions, although one can do some "macro-
> like" things using higher-order functions in Python. The importance
> of the Lisp macro system cannot be understated, though -- to Lispers,
> writing macros is not at all an unusual or remarkable thing; it is
> simply part of how the language works.
>
>
> Both languages are to a certain extent misunderstood by those who have
> not used them. (This is probably true of all languages!) People
> coming from C-like languages criticize the syntax of both, largely
> because it is unfamiliar to them: Python seems to use too little
> punctuation, while Lisp seems to use too much! In the case of Lisp,
> this is a conscious choice to keep the language close to its own
> syntax-tree internal representation; in Python, it is a conscious
> choice to ensure that the visible representation matches the block
> structure.
>
> Another thing common in these misinterpretations is the claim that
> either is an "interpreted language". Python is bytecode-compiled,
> like Java, with a native-code compiler under development for some
> platforms. Lisp can be either interpreted or compiled; production
> implementations mostly feature native-code compilation on demand,
> while one popular one (CLISP) does bytecode. Lisp is probably unique
> among languages in allowing extensive interaction between the user,
> interpreted code, and compiled code: from the Lisp prompt one can
> compile, disassemble, and trace arbitrary code, as well as call
> interpreted functions from compiled ones and vice versa.
>
> In a sense, Python is more abstract than either C or Lisp. Just as C
> places the programmer close to the binary representation and the
> underlying hardware, Lisp places the programmer close to the syntax
> representation, the reader, and the compiler or interpreter. Python
> does neither, not allowing the programmer to manipulate binary
> structure in memory (like C) or syntactic structure in the program
> syntax tree (like Lisp). Put another way, Python is more restrictive
> than either C or Lisp ....
>
>
> Culturally Python and Lisp are vastly different. While both are bound
> between the world of research and that of practical programming, Lisp
> has a much longer tradition behind it, and the tensions between
> academe and industry are more an elemental part of its culture. (Just
> listen in on any Lisp-vs.-Scheme discussion.)
>
> The Python culture is connected to the Unix and Free Software (or Open
> Source) cultures; while it has made many efforts to extend itself to
> other platforms, it's in many ways a product of Unix, for instance in
> its ways of handling files and the network. It is also closely tied
> to Free Software -- Python itself is a Free Software product, with
> many developers contributing back to a single code base, while Lisp is
> a more industrial product with many commercial vendors (as well as
> open-source developers) separately implementing and extending an
> American (ANSI) industrial standard, namely Common Lisp.
>
> It should be noted: Lisp pre-dates both Unix and Free Software, and
> there are some deep-seated disagreements between Lispers and both Unix
> fans and Free Software partisans.
>
> (Python is also connected to the Unix idea of "scripting" and the use
> of disparate languages for different purposes. Thus, Python users do
> not consider it a weakness that the language is extended in C rather
> than being self-hosting. This may reflect a deeper disconnect in
> various people's views as to what a "computer language" is!)
>
> Modern Lisp is the direct, lineal heir to a computing tradition going
> back almost fifty years, to before the dawn of anything new users
> would recognize as a "modern" computer system. This manifests both in
> its syntax and its culture: there are features Lisp has that no other
> current computing system does, and Lispers know it. Python, on the
> other hand, is a comparatively brand-new system, which "cherry-picks"
> features from the history of computing languages, fitting them into a
> minimal system which seems almost ahistorically abstract.
>
--
http://tilton-technology.com
What?! You are a newbie and you haven't answered my:
http://alu.cliki.net/The%20Road%20to%20Lisp%20Survey
More information about the Python-list
mailing list