News for hackers. Stuff that matters.
Re:Admitting That Functional Programming Can Be Awkward (2007) by tsimionescu on Saturday October 24, 2020 @01:39PM (#24880707)
At least in all of the discussions I have seen, the difference between statements and expressions is whether they return a value, not whether they have side-effects. So (def x b) is an expression, because it returns a value. {} in C is a statement, even though it has no side effects.

Now, there are some statements in CL as far as I remember - I believe (declaim x integer) is a kind of statement, at least in the sense above.

But you can write a CL program that doesn't use a single statement.

Re:Admitting That Functional Programming Can Be Awkward (2007) by fiddlerwoaroof on Saturday October 24, 2020 @05:36PM (#24882132)
The return value of some forms is implementation dependent, but all forms return a value in CL:

    CL-USER(1): (defparameter *foo* (declaim (special x)))    
    *FOO*
    CL-USER(2): *foo*
    (X)
    CL-USER(3): (defparameter *bar* (declaim (type integer x)))
    *BAR*
    CL-USER(4): *bar*    
    (X)

In other cases, e.g. `(values)` which is an expression that returns no values, the value is nil