5 ms·
What makes Lisp (Scheme) great (for me) is that functions are first class citizens, the prefix syntax is consistent, tail call recursion optimization makes it r
by a2code 3y ago
What makes Lisp (Scheme) great (for me) is that functions are first class citizens, the prefix syntax is consistent, tail call recursion optimization makes it runnable, and metaprogramming allows for powerful abstractions. What I would also emphasize is that using lambda expressions makes you wonder when to define something and when to omit the definition. Lisp is simple to learn but difficult to master.
What I would like to do is to use Lisp to solve complex problems. The problem is that abstractions are not often efficient.
For example, consider computing the calculus product rule. An S-expression abstracts the function: (lambda (u v) (* u v). With metaprogramming, this becomes a new S-expression (lambda (u v) (+ (* (d u) v) (* u (d v)))), where (d u) and (d v) further compute the derivative. To optimize this further, you need implementation dependent code and replace abstractions of S-expressions with native machine code. This is where I feel that the troubles with Lisp start.
- hayley-patton 3y ago> To optimize this further, you need implementation dependent code and replace abstractions of S-expressions with native machine code This can be done by a program called a compiler. There are many compilers for Lisp. (In other words, the same argument applies to every language ever which doesn't exactly correspond to machine code.)
- a2code 3y agoAnd yet to extend Python, for example, you write code once. To extend Lisp, you have to extend a multiplicity of implementations you find relevant.
- JonChesterfield 3y agoThere are properly good lisp compilers. The baseline is good and they're extensible - you can teach them things about your domain. SBCL for lisp. Maybe racket for scheme.