3 ms·
CL is pretty ugly. Scheme isn't so hot either. it's the reason i stayed away from lisp in general for a good half year until Arc came out. it's like these la
by tokipin 18y ago
CL is pretty ugly. Scheme isn't so hot either. it's the reason i stayed away from lisp in general for a good half year until Arc came out. it's like these languages had a chance to be pretty due to lisp's streamlined syntax... but they ruined it by using excessively verbose names and abusing the parentheses
- parenthesis 18y agoI agree that CL is pretty ugly. But it is also seriously customisable. For example, you can make your own package in which (eq (symbol-function 'map) (symbol-function 'common-lisp::mapcar)) ---> T (eq (symbol-function 'mapseq) (symbol-function 'common-lisp::map)) ---> T And you can do lots of syntax stuff using read macros. Even simple stuff like doing, e.g., (defmacro mvb (&rest args) `(multiple-value-bind ,@args)) can really help. Having said all that, however, I have written my own interpreter in C for my own Lispy language, which I continue to develop (and use a lot for real tasks).
- jrockway 18y agoFor every excessively verbose identifier in CL, I can give you another that's excessively short. I won't defend any of CL's design, it's horrible. But it's not a major problem for actually using the language, you can rename whatever function you want, or have your editor type it for you. As for the parentheses, I don't see any excess. (let (foo bar) ...) and (let ((foo 0)(bar 1)) ...) are both useful. I would hate to have to write: (let (foo nil bar nil) ...) just because you're afraid of a few parentheses. It is easy to type and easy to read. (foo nil bar nil) is, IMHO, nearly unreadable. Edited to add: Another reason I like the ((var binding)...) syntax is because it keeps the core language as unambiguious as possible. If I want to have an Arc-like binding operator, I can just write one and use that: (my-let (foo 1 bar 2 baz 3) (+ foo bar baz)) ; ==> 6
- rkts 18y agoArc: (let (foo bar) nil ...)
- tokipin 18y agoArc's is: (let foo 0 ...) (and what rkts wrote, due to Arc autodestructuring things.) the multi-bind is with certainly things can be renamed, but personally i feel that if you don't go the extra mile for your users, someone else will, and you probably don't deserve success