コンテンツにスキップ

メタプログラミング

出典: フリー百科事典『ウィキペディア(Wikipedia)』

 (: metaprogramming) [ 1][1]

[]


[2]

LispLispSSS
(defstruct point (x 0) (y 0))

という記述から

  • 構造体定義 point型
  • コンストラクタ make-point (省略時の初期値は0, 0)
  • アクセサ point-x point-y
  • 複製 copy-point
  • 述語 point-p

が自動的に生成される。

これがメタプログラミングと呼ばれるのは、「自動生成が言語組み込みの機能ではなくLispのマクロによって記述されており、必要なら同様の機構をプログラマが定義できる」ためである。これは事実上言語文法の拡張に等しく、非常に強力なプログラム能力を得ることになる。反面、マクロは任意の字句の置き換えが可能であるため、展開されたコードが言語の文法から逸脱する可能性があることを意味している。そのため一般に必要でないメタプログラミングは避けられるべきとされる。

たとえば、文字列を整形して出力するformat関数

(format t "hello,world")

[3]LispSLispS()
(defmacro backwards (expr) (reverse expr))

を定義すると、以下のように書ける:

(backwards ("hello,world" t format))

LispLisp

C++

[]




JavaScript
const add = new Function(..."xy", "return x + y");

add(2, 3); // => 5

add[ 2]

使Function

JavaScript

Proxy

Reflect

[4]使

脚注[編集]

出典[編集]

  1. ^ あんどうやすし 2020, p. 343.
  2. ^ あんどうやすし 2020, pp. 343–344.
  3. ^ Seibel, Peter (2005年4月11日). “Practical Common Lisp”. Internet Archive. p. 95. 2023年12月11日閲覧。
  4. ^ あんどうやすし 2020, p. 345-346.

註釈[編集]

  1. ^ "meta-"は「高次」、「超」を表す接頭辞。
  2. ^ ただの例であって、推奨されない書き方である点に十分に留意

[]


JavaScript20201113ISBN 978-4-87311-922-9 

[]


Common Lisp

Scheme

LISP

REBOL

 ()



 -