Subject: Re: What is LISP? From: Erik Naggum <erik@naggum.no> Date: 2000/02/09 Newsgroups: comp.lang.lisp Message-ID: <3159120191728291@naggum.no> * Robert Posey <muddy@raytheon.com> | Question 1: | | As I understand it nothing in CL standard requires an Interpreter, does | it even require an interactive mode? standards always have explicitly and very strictly limited scope. the way users interact with a Common Lisp system is outside the scope of the Common Lisp standard. | Question 2: | | What should LISP typing method be called? it is already called "dynamic typing", "manifest typing", etc. | I have heard several variations, but all the more advanced code I have | seen makes use of typing for at least some of the symbols. you're applying static typing terminology to dynamic typing phenomena. this will hurt your understanding. in Common Lisp, _values_ have type, and variables can (normally) hold values of any type. therefore, you don't talk about the type of symbols (variables), but about the types of values that a variable can hold. in statically typed languages, the type affects the layout and size of the memory allocated to a variable. in Common Lisp, a variable is always allocated the same size memory, and what it holds is a pointer to the value, stored elsewhere, except in some obvious optimizations like (small) integers and characters, which fit in the space of such a pointer. to make things work efficiently in this model, pointers carry type information. this is very much unlike what you do in statically typed languages, where pointers are just machine addresses which the compiler hopes will point to values it knows, and then it tries to make sure its hopes come true by barfing on code that it can see will or does violate its hopes. it can never actually be 100% certain, however. using typed pointers, one doesn't have to deal with such silly hopes, and can instead work with whatever is there. put it another way, in a statically typed language, you may sometimes need to lie to your compiler to do the right thing, like you sometimes have to lie to officials who are anal-retentive about stupid laws and regulations, while in dynamically typed languages, you don't have to lie, because the laws and regulations can't be stupid. | Question 3: | | Is it true that you can overload(in C++ Terms) built in operators in LISP? no. C++-style overloading is fundamentally evil, and is therefore not supported by good languages. (note: this is not an opinion.) | Question 4: | | What does the :ntest (I think) key do for applicable functions? whatever the function documents it to do. the meaning of keywords arguments is not added vertically to functions in Common Lisp. :NTEST is unknown to me. however, if you refer to the :TEST-NOT keyword, common to functions which also sport a :TEST keyword, for functions that support this semantics, it's a way to specify a test function to whose value NOT is applied before it is used. another way to do the same thing is :TEST (COMPLEMENT <function>). #:Erik