呼んだのは誰?
Posted feedbacks - Prolog
処理系依存、ですよ。
write('')みたいな副作用でもしないと、最適化で「呼び出し」が無かったことになっちゃうので、そうしています。
実行例
$ pl -qs stack.pl
aaa(**)
bbb(**)
?-
1 2 3 4 5 6 | aaa(X):-whoami(X),write('').
bbb(X):-whoami(X),write('').
whoami(X):-prolog_current_frame(F),prolog_frame_attribute(F,parent,X0),prolog_frame_attribute(X0,goal,X).
:-aaa(Xa),writeln(Xa),bbb(Xb),writeln(Xb).
|



にしお
#3384()
Rating1/1=1.00
Ruby で表現すると、 以下のような「fooという関数を呼び出す関数」#bar、#bazがあるとき
このbar, bazの返り値が以下のようになるような関数fooを定義してください。このお題は匿名の「Smalltalk からの挑戦状」を元に作成しました。 確かにこの手のリフレクションの機能が言語によってどう違うのかは興味深いところです。 リフレクションを使う問題をいくつか考えてみたいと思います。 ご投稿ありがとうございました。
[ reply ]