This blog has moved to Medium

Subscribe via email


Posts tagged ‘LISP’

Practical Database in C#

Today I took Eli’s challenge (whether he intended it as such or not not :).

Among other things, he mentioned on his blog his opinion that LISP is a more powerful programming language than C#. He offered Practical as an example of LISP’s power. Practical is a very simple database built using very few lines of codes.

The challenge I took on myself is to code Practical in C# and compare the implementation with the one given in LISP.

It took me 2-3 hours to read the link on Practical and code it in C#, and I wrote a great deal more lines of code than what I saw in the LISP code. So in a simple contest, C# (or just me as a coder) lost.

However, here are my thoughts:

  1. About 80% of the code I wrote is general purpose. It simulates abilities already existing in LISP. General-purpose classes I wrote are:
    • ConsoleReader – Reading any class from the Console.
    • DefaultFormatter> and ListFormatter – Pretty-print any object or list.
    • Functors – Functors in C# are called delegates. I didn’t find (nor looked too hard) for functions to combine, negate and manipulate delegates – so I wrote some.
    • MoreXmlSerializer – As a naming convention, I like to name MoreFoo any class that contains methods that I believe should have been in Foo from the start, where Foo is some class supplied by the framework. Starting at C# 3.0, the ability to add methods to existing classes is supported, so I could adjust the naming convention accordingly.
    • StringConverter – Convert a string to to a given (dynamic) type.

    Besides this code, the actual Practical C# code is very small and concise.

  2. The C# code is type safe. I’m not aware of type-safety in LISP, though as I said I’m not a LISP pro.
  3. The code I wrote is in C# 2.0. Some new features in C# 3.0 should help make it a bit more concise (especially lambda expressions and LINQ).

I think this experiment didn’t change my opinion greatly. Yes, functional programming is good. It exists in C# as well as in LISP. Yes, LISP handles lists very well. But, not everything is life (or in programming) should be represented as a list.

I’m attaching my code here. If you have suggestions or comments, please let me know. Also, once I install Visual Studio 2008 (I’ll probably wait for the final release), I might try coding this in C# 3.0 and see how it helps the cause.