top recent

プログラミング言語:高階関数:談話室

関連ページ

プログラミング言語 プログラミング言語:高階関数 プログラミング

目次

  1. pascalって内部定義可らしいけど、その関数を返せたりはするのかな。...
  2. 関数ポインタなら返せたような気がしますが...
  3. Delphi3.1Jで試しました...
  4. auto変数のエクステントが手続き内に限定されているからクラッシュするんでしょう...
  5. 高階関数(High-oder funtion,functor)が在れば自由変数orレキシカルスコープは要らない?...

pascalって内部定義可らしいけど、その関数を返せたりはするのかな。

(define add-n (lambda(n) (lambda(i) (+ i n))))
(define add10 (add-n 10))
(add10 1)
==>11
(define add20 (add-n 20))
(add10 2)
==>22

[[id:690]] 2002-06-12 04:31:50


関数ポインタなら返せたような気がしますが

TurboPascal ver4 くらいの遠い記憶ですので間違っているかも。
子関数から親関数のローカル変数へはアクセスできたとしても、クロージャにはなり得ませんよね。

# ところで最後の式は (add20 2) => 22 ですよね。

----
Tiki:Delphi の「関数のネスト」って所で
内向きのほうは試したんですが、外向き(関数ポインタとかを返す)を試すのは思いつかなかったなあ。
外向きは、今暇がなくて(T_T)試せないっす。誰か無料版のDelphi/Kylixで試してください(^^; -戯

まあ、もしそれが可能だったとしても、その環境(継続?)のインスタンスは、(複数を同時に)作ることは
出来るとも思えないんで、嬉しさはあんまり無いかも。
-それこそdelphiならMethodPointerの出番かな

[[id:692]] 2002-06-13 12:24:18


Delphi3.1Jで試しました

関数ポインタなら返せたような気がしますが (#2)について、やりました。以下のコードをコンパイルさせたところ、

type
Thoge=procedure;
function getHoge:Thoge;
var i:integer;
procedure hoge;
begin
end;
begin
result:=hoge;
end;


ローカル手続き/関数 '<name>' を手続き変数に代入しました
Local procedure/function '<Name>' assigned to procedure variable

このエラーメッセージはローカル手続きを手続き変数に代入しようとした場合か,ローカル手続きを手続きのパラメータとして渡そうとした場合に表示されます。そのような操作は,外側の手続きがアクティブでなくてもローカル手続きを呼び出せることになるので違法です。ローカル手続きが外側の手続きの変数にアクセスしようとするとプログラムがクラッシュします。


とのコンパイルエラーになりました。少なくともDelphiでは明示的に禁止してますね。

それにしても「クラッシュします」ですか。ローカル手続きを外界に晒す能力は全く持たせていないことを示していますね。*

----
もっとも、そんなことがもし出来たとしても、
ローカル状態と関数のペアである所謂「インスタンス」を
(好きな個数)作ることが出来ない以上は、メリット殆ど無いですけどね。

それに、どうせコンパイルしか出来なくて、プログラムをデータのように柔軟に「あつかう」ことが出来ない言語なので、
期待してもしょーがない面は有ります。
object(class)にすることで問題を半分解決はできますが、
その構造を実行時に自在にいじる手段が乏しいので、旨みがすくない。

[[id:704]] 2002-09-18 11:29:24


auto変数のエクステントが手続き内に限定されているからクラッシュするんでしょう

Re: Delphi3.1Jで試しました (#3)
クロージャを作る機能がないんですね。
自由変数のない手続きなら許してもよさそうですが。

[[id:1212]] 2002-09-18 11:30:38


高階関数(High-oder funtion,functor)が在れば自由変数orレキシカルスコープは要らない?

自由変数orレキシカルスコープ経由で変数を参照するより、デフォルトの引数として先に束縛しておけば良いのでは?と思う今日この頃。

みなさん、如何思いますか?

「レキシカルスコープ」 M.Hiroi's Home Page
http://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp/xyzzy25.html

[[id:727]] 2002-06-17 23:44:28


top recent

HashedWiki version 3 beta
SHIMADA Keiki