Re: binding (Re: Thank you!)
新城@筑波大学情報です。こんにちは。
In article <m3vfm2mnk5.fsf_-_@nospam.maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda-news@ialab.is.tsukuba.ac.jp> writes:
> * late bindingではないが、関数の再定義(二重定義)を許す言語の例
> … これまで話題になった再定義とはちょっと違うかも知れませんが、
> MLの関数名と実体の対応はコンパイル時に完全に決まります。同じ名前の
> 関数が2つ定義されると、『それ以後の呼び出しでは』新しい定義が参照さ
> れます。すでに古い定義を参照してコンパイルされた部分には影響しません。
再帰呼出しは、どうなるのですか? 単純なものでなくて、相互に
呼び合うものなどです。
Forth は、late binding ではないのですが、再定義できます。同
じ名前の手続きを呼ぶと、古いものに対して stacking されます。
再帰はできません。たとえば、
: w lock w unlock ;
とすると、w という手続きは、lock & unlock 付きの w になりま
す。Cで書くとこんな感じ。
w()
{
...
}
...
w()
{
lock();
w(); // 再帰でなくて古い w() が呼ばれる
unlock();
}
PostScript は再帰はできたと思いますが、showpage を再定義して
n-up にしたりしてますね。
% psnup -2
%%BeginProcSet: PStoPS 1 15
userdict begin
[/showpage/erasepage/copypage]{dup where{pop dup load
type/operatortype eq{1 array cvx dup 0 3 index cvx put
bind def}{pop}ifelse}{pop}ifelse}forall
んん、よめないなあ。
PDF って、そういうのできないんですかね。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735