>125
関数がファーストクラスってのはあんまり本質とは関係ないぞ。
関数型言語とは、基本的に手続き的な処理フロー(C言語でいう、
複文に当たる物)が無く、数学的な式と同じ様に記述できる事を
目的とした言語。
で、実用上それだけじゃ限定された使い方しかできないので、
手続き型と同じく副作用も起こせる様に拡張されているのが現状。
数学的な意味を保ったまま間接的に副作用を起こせる言語も
ある。(HaskellやConcurrent Cleanとか。)

LISPは現在でもリスト処理においては本来の関数型言語として
記述できるけど、CommonLispまでの一連の拡張で汎用型言語という
意味合いが強くなっている。