Why don't people like lisp?

Pascal Costanza costanza at web.de
Sun Oct 19 10:48:08 EDT 2003


Marcin 'Qrczak' Kowalczyk wrote:

> Indentation in Lisp is not clear enough. Let's look at an example from
> http://www-users.cs.umn.edu/~gini/aiprog/graham/onlisp.lisp:
> 
> (defun mostn (fn lst)
>   (if (null lst)
>       (values nil nil)
>       (let ((result (list (car lst)))
>             (max (funcall fn (car lst))))
>         (dolist (obj (cdr lst))
>           (let ((score (funcall fn obj)))
>             (cond ((> score max)
>                    (setq max    score
>                          result (list obj)))
>                   ((= score max)
>                    (push obj result)))))
>         (values (nreverse result) max))))
> 
> Note that only one pair of adjacent lines is indented by the same amount.
> Other alignments are in the middle of lines.
> 
> Here is a straightforward translation into my dream language; note that
> there aren't a lot of parens despite insignificant indentation and despite
> using braces (like C) instead of bracketing keywords (like Pascal):
> 
> def mostn Fun [] = [], null;
> def mostn Fun (First\List) {
>    var Result = [First];
>    var Max = Fun First;
>    each List ?Obj {
>       let Score = Fun Obj;
>       if Score >  Max {Max = Score; Result = [Obj]}
>       if Score == Max {Result = Obj\Result}
>    };
>    reversed Result, Max
> };

Apparently, Paul Graham doesn't like CLOS nor the LOOP macro. Here is 
another verson in Common Lisp (and this is not a dream language ;):

(defmethod mostn (fn (list (eql nil)))
   (declare (ignore fn list))
   (values nil nil))

(defmethod mostn (fn list)
   (loop with result = (list (car list))
         with max = (funcall fn (car list))
         for object in (cdr list)
         for score = (funcall fn object)
         when (> score max) do (setq max score
                                     result (list object))
         when (= score max) do (push object result)
         finally return (values (nreverse result) max)))


Pascal





More information about the Python-list mailing list