challenge 呼んだのは誰?

自身を呼び出した関数(メソッド)の名前を返す関数(メソッド)を書いてください。

Ruby で表現すると、 以下のような「fooという関数を呼び出す関数」#bar、#bazがあるとき

def bar; foo end
def baz; foo end
このbar, bazの返り値が以下のようになるような関数fooを定義してください。
bar  #=> "bar"
baz  #=> "baz"

このお題は匿名の「Smalltalk からの挑戦状」を元に作成しました。 確かにこの手のリフレクションの機能が言語によってどう違うのかは興味深いところです。 リフレクションを使う問題をいくつか考えてみたいと思います。 ご投稿ありがとうございました。

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).

Index

Feed

Other

Link

Pathtraq

loading...