廣島です.
> 廣島さんがPerlの例を書いてくれましたが、例えばC言
> 語でも、関数ポインタという形で扱うことは出来ないこ
> とはないと思います。
>
> ただし、CやPerlの場合は「参照」を指定しなければな
> らない時点で「ファーストクラスプロシージャ」ではそ
> もそも無いわけです。
>
C の場合,関数の動的な生成は不可能で,
関数ポインタの指す関数は,複数個の可能性はあるとは言え,
コンパイル時に定まっていますし,
その意味でも「ファーストクラス」とは言えないのではないでしょうか.
C++ なら () 演算子をオーバーロードした関数オブジェクトを
使えば,「ファーストクラス」に見えないこともないでしょう.
;; Scheme の場合,
;; カウンタ関数を返す関数
(define (counter s)
(let ((i s))
(lambda ()
(display i)
(newline)
(set! i (+ i 1)))))
(define a (counter 1)) ; a は 1 から始まるカウンタ
(define b (counter 100)) ; b は 100 から始まるカウンタ
(a) ; 1
(a) ; 2
(a) ; 3
(b) ; 100
(b) ; 101
(a) ; 4
(a) ; 5
-----------------------------
廣島 勉
(tsutomu@...)