以下のように記述すると動的に任意の述語を定義できる。カンマで区切って複数述語呼び出すようなものもできる。
javascriptも文字列から関数定義とかできるけど、そんな感じに使えそうだ。
こういう機能は普通は使わないけどしかるべき時に使うとすごいプログラムが書けると思う。
セキュリティホールになりそうな気も、、、
動的に
test(X):-
X1 is X+1,
X2 is X1+1,
write(X2).
という述語を作成したい場合(意味無いけど)
assert(test(X):- (X1 is X+1, X2 is X1+1, write(X2))).