2011-01-24 2 views
4

私はLISPを初めて使っています。私はallegro-clを使用しています。私は定義して読み込んだ関数を呼び出すのが難しいです。特定のパッケージ内のすべてのメソッドの一覧表示や変数のリスト表示、パッケージ名のリスト表示など、私が定義したものをブラウズできる方法は何かを知りたいです。LISPの定義を参照してください

+0

類似:http://stackoverflow.com/questions/1511981/how-to-examine-list-of-defined-functions-from-common-lisp-repl-prompt – harschware

答えて

4

私はAllegroを使用していませんCLので、私はあなた自身がこれのために提供するツールについて話すことができます。この作業のためにAllegro CL IDEが提供しなければならないものを確認したいかもしれません。

LIST-ALL-PACKAGES機能を持つすべてのパッケージのリストを取得できます。あなたは自分の名前を印刷するには、このようにそれを使用することができます。

(dolist (p (list-all-packages)) (write-line (package-name p))) 

CLパッケージは、シンボル(すなわち名前)ではなく、これらの名前に関連付けられているオブジェクトのコレクションです。そのシンボルに定義されている値や関数があるかどうかを調べるには、その中の名前をさらにクエリする必要があります。 DO-SYMBOLSを使用して、パッケージ内のすべてのシンボルをループすることができます。これは、現在のパッケージ内のすべてのシンボルを印刷します:

(do-symbols (s) (print s) 

これだけの機能:

(do-symbols (s) (when (fboundp s) (print s))) 

とその家のパッケージ現在のパッケージで、これが唯一の機能:

(do-symbols (s) 
    (when (and (eq (symbol-package s) *package*) 
      (fboundp s)) 
    (print s))) 
+0

非常に助けていただきありがとうございます。関数の定義をどのように出力しますか? – harschware

+0

これらの最後の2つは、現在のパッケージの関数に制限されていないようです。少なくとも、すべてのパッケージ(現在のスコープで呼び出すことができる)から定義された関数を見ることができます。 – harschware

+0

関数の定義を印刷する標準的な方法はありません。あなたの実装がデバッグをサポートするためにそれを保存することは可能かもしれませんが、そうは思わないでしょう。しかし、入手可能なものは、ソースの場所です。 (SLIMEのswank-allergro.lispファイルが正しく理解されていれば、Allegroはそのための 'excl:find-source-file'関数を提供する必要があります –

3

名前の一部を覚えている場合は、常にAPROPOS(特定のパッケージに限定される場合があります)を使用してフルネームを見つけることができます。

0

同じ問題が発生しました。ドキュメンテーションを読んだ後、私はREPLに型定義された定義を思い出す方法がないという意見になった。

この問題を回避するために、私は常にエディタウィンドウ(Ctrl + Nがない場合は)に入力します。このようにして、定義を入力したり編集したりすることができます。定義を評価する必要がある場合は、増分評価のためにCtrl + Eを押します(ツールメニューの他のオプションを参照)。左にリスナーウィンドウ、右に入力と出力を表示するエディタウィンドウを保持します。

まだいくつかのバグを引き起こす可能性がある小さな問題があります。変更した後で定義を評価するのを忘れた場合、古いものはREPLに残ります。 Ctrl + Eキーを押し続けます。

複数のファイルが開いていて、ソースファイルの1つに定義を配置する場合は、[検索]> [Apropos]を使用できます。

関連する問題