Artificial Intelligence: What programming language should I learn to do Artificial Intelligence?

LISP? Visual Basic? VC++? C#?  Something else like SNOBOL or Flowmatic (just kidding)...

I would say C#, my apologies to John McCarthy, see his papers referenced at his Stanford site, and also I quote from his excellent paper: "LISP-Notes on its Past and Future-1980" in this blog entry.  LISP is the classical artificial intelligence language, and really I think that outside of Haskell, it has strongly influenced the formation of object-oriented languages.  However, I do not think that LISP meets the needs of the current user of artificial intelligence, and I make that statement with caution and respect for the extensive work that has been done with LISP by the computer science and artificial intelligence pioneers.  Times have changed, and the needs of the user, not the developer, is now the main driver of computer science and the more pragmatic information science workers.  But with any broad statements that will likely get a response from the one or two readers of this blog, let's take a look at the definition of LISP, as we move toward the programming of AI, it is important that the history of AI is understood, and I could be wrong, so in case I am, you have the references to LISP to get back on track (from the article mentioned earlier in this entry):

As a programming language, LISP is characterized by the following ideas:

  1. Computing with symbolic expressions rather than numbers.
  2. Representation of symbolic expressions and other information by list structure in computer memory.
  3. Representation of information on paper, from keyboards and in other external media mostly by multi-level lists and sometimes by S-expressions. It has been important that any kind of data can be represented by a single general type.
  4. A small set of selector and constructor operations expressed as functions, i.e. car, cdr and cons.
  5. Composition of functions as a tool for forming more complex functions.
  6. The use of conditional expressions for getting branching into function definitions.
  7. The recursive use of conditional expressions as a sufficient tool for building computable functions.
  8. The use of tex2html_wrap_inline94 -expressions for naming functions.
  9. The storage of information on the property lists of atoms.
  10. The representation of LISP programs as LISP data that can be manipulated by object programs. This has prevented the separation between system programmers and application programmers. Everyone can ``improve'' his LISP, and many of these ``improvements'' have developed into improvements to the language.
  11. The conditional expression interpretation of Boolean connectives.
  12. The LISP function eval that serves both as a formal definition of the language and as an interpreter.
  13. Garbage collection as the means of erasure.
  14. Minimal requirements for declarations so that LISP statements can be executed in an on-line environment without preliminaries.
  15. LISP statements as a command language in an on-line environment.

Dr. McCarthy has given use the basis of an objected oriented language, so why do we need Java, C#, VB.NET or C++ then?  I am not sure, hope you can help me out here.  Since the current approach to programming the Xbox requires that you use C# Express with XNA Express, I will set aside my love for Visual Basic and discuss LISP in comparison to C#, and the CLI.  As you can guess, I work for Microsoft, if you want to point out the comparison to Java, please feel free to add a link to your URL here, and please make sure to point to my site from your BLOG or web site.  I will spend no time with Java, I hope you will help me out with this.

C# is a standards based language, I am sure that java will be as well someday but it isn't at this time.  If you have not looked at the C# ECMA standard, the difference between an ECMA standard and an ISO standard is that the documentation for the ECMA is free for the community of people looking for information about the language, you can download the ISO/IEC 23270:2006, so how does C# compare with LISP?  Some of the features such as "on-line" environments, doesn't really map to our current environment of mobile computing, and many expert/professionals, feel that the compiled programming languages are better, but is this the case?  I think the case can be made that C# parallels LISP pretty closely, including the garbage collection, objects and the ability to improve the language.  As we discuss and look around in AI, a comparision between C# and LISP is very important. 

As an assignment, I ask the reader to download the C# ISO/IEC standard (which is the same as the ECMA standard now) and review it.  On our first exam, I will be asking that you be able to use the standard to implement a simple program such as Hello World.  To be able to get our AI to work on the Xbox, we will need to proceed down the path of C# and C# Express, so get C# Express loaded on your machine, then start reading the ISO/IEC standard.  It is much easier to read than you think, sadly as a writer, I realize that the standard is better written than most books on the subject.

 Let me know what you think.