うーん 難しい・・
もし(defun hoge (a)(+ a 1))という関数を定義したとして
(hoge (+ 1 2))という風に呼び出すとすると
関数の本体が実行される前にまず(+ 1 2)の部分が評価されて3になりますよね。
その後3がaに結び付けられて関数の本体(+ 3 1)が評価されて4を返すと思うんですが
145の例だと関数の本体の部分のpが評価される前に引数の(list 1 2 3)が評価されて
(1 2 3)になった後(1 2 3)がpに結び付けられて関数の本体の部分のpつまり
(1 2 3)が評価されるならやはりエラー になるはずなのにならないのがまだ理解できないです。