> That said, Common Lisp is weird. What I find particularly jarring is that functions and variables live in different namespaces: if you put a function into a variable, you can’t just use it like a function, you have to funcall it.
Unless I’m misunderstanding, the author sounds like a developer that’s primarily used JS. It’s really not abnormal to have to include parens after a method name in a language, which indicating that you are calling a function.
> It’s really not abnormal to have to include parens after a method name in a language
That's not what he means. Assuming some pseudocode with a more common syntax to prune the parentheses question, Common lisp is doing this:
function f(x) { print(x) }
let a = f
funcall(a)(27) # prints 27
Whereas Scheme is doing this:
function f(x) { print(x) }
let a = f
a(27) # also prints 27
This is the fundamental difference between so-called Lisp-1 and Lisp-2 families, depending on whether functions and variable share the same namespace or if they have to be “lifted” from one to another through funcall.
In common Lisp you can call a regular function defined with defun as (foo "something"), but if bar is a variable containing a fuction you have to use (funcall bar " something"). I agree that this is weird and confusing.
Unless I’m misunderstanding, the author sounds like a developer that’s primarily used JS. It’s really not abnormal to have to include parens after a method name in a language, which indicating that you are calling a function.