Concurrent Clean : ABCマシン(16) : buildとbuildh

の使い分けがまだ良く分かっていない。
おそらく、

build
引数が全て足りている場合の遅延関数オブジェクトを作る
buildh
引数が不足している場合のカリー化関数オブジェクトを作る

という区別なのでしょう。ここまでは分かった。で、その引数に与えられた情報がどのように使われるのかが、まだちょっと自信がない。
buildは3つの引数を取る。

descriptor_name
ディスクリプタ
nr_args
スタックから取り出す引数の個数
code_name
遅延実行のエントリ

ディスクリプタは、アセンブリで次のように表現されるデータ構造

e__Lib__dapp:
	.word	0
	.word	0
	.long	yet_args_needed_0
	.word	1
	.word	8
	.long	yet_args_needed_1
	.word	2
	.word	16
	.long	e__Lib__lapp
	.word	3
	.word	24

これは、Libモジュールに定義されたアリティ3のapp関数のディスクリプタ。「yet_args_needed_0」「yet_args_needed_1」「e__Lib__lapp」はそれぞれ、実行コードのエントリアドレス。「yet_args_needed_?」は、カリー化関数の適用で、引数が不足しているときに呼ばれる実行コードのエントリで、「e__Lib__lapp」は、最後の引数が与えられたときの実行コードのエントリ。
buildで使われるのは、最後の

	.word	3
	.word	24

の部分だと思われる。この情報を元に、関数オブジェクトのメモリ割り当てを行うのではないかと思われ、そこに、nr_argsで与えられた数の引数とcode_nameで与えられたエントリーを代入し、関数オブジェクトを作るのだという仮説を立てている。