作者: Tsutomu Hiroshima
日時: 2003/3/21(15:29)
廣島です.

>  廣島さんが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@...)