「基準点」は?
階位差を議論するとして、
- 「基準点」(1階)は何かを決める
必要が有ると思います。
1階論理と言えば、Prolog言語なので、その言語要素程度が1階とすると良いと思います。
Prolog言語では、
- 項
- 事実(「parent(john, mary).」 (ジョンはメアリーの親である、という事実))
- 規則(「grandparent(X, Y) :- parent(X, Z), parent(Z, Y).」(XがZの親であり、かつZがYの親であるならば、XはYの祖父母である))
が主な言語要素なので、これと同列の、プログラミング言語の言語要素は1階だと思います。
値の参照について
ここで、
- 値の他、値への参照も1階の議論として扱いたい
のですが、
- 関数定義の他、関数定義への参照は1階から階位差が生まれる
という事実が有るので(なにせ高階関数なので)、
その辺の合理化が必要になります。
- 1.1階まで(階位差0.1まで)は1階として議論してヨシ
とかだと、値への参照が1階でなかった場合にも、1階として議論が可能になると思います。
勿論、
- 関数定義と、関数定義への参照の階位差が0.1より大な場合
は、別のやり方を考える必要が有ると思います。
結論
これからも「型駆動開発の問題点」でプログラミングが嫌いになる人は存在し続けることでしょう。