LISPで定義を参照します
-
24-10-2019 - |
質問
私はLispに非常に新しいです。私はAllegro-Clを使用しています。私は定義してロードした関数を呼び出すのが困難です。たとえば、特定のパッケージのすべてのメソッドをリストしたり、変数のみをリストしたり、パッケージ名をリストしたりするなど、定義したものを閲覧する方法を知りたいです。
解決
私はAllegro CLを使用していないので、CL自体がこれを提供するツールについてのみお話しできます。 Allegro Cl Ideがこのタスクに対して提供しなければならないものを確認することをお勧めします。
すべてのパッケージのリストを、すべてのパッケージを使用して取得できます。このように使用して名前を印刷できます。
(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)))
他のヒント
名前の一部を覚えている場合は、いつでもAPROPOS(特定のパッケージに限定されている可能性があります)を使用してフルネームを見つけることができます。
私は同じ問題に遭遇しました。ドキュメントを読んだ後、私はREPLに入力された定義を思い出す方法はないという意見に至りました。
この問題を回避するために、私は常にエディターウィンドウ(存在しない場合はctrl+n)に入力します。これにより、定義を入力したり、編集したりすることができます。定義を評価する必要がある場合は、増分評価のためにCtrl+Eを押します(ツールメニューの他のオプションを参照してください)。左側にリスナーウィンドウを保持し、右側にエディターウィンドウを保持して、入力と出力を確認します。
いくつかのバグを引き起こす可能性のある小さな問題がまだあります。変更を加えた後に定義を評価するのを忘れた場合、古いものはREPLに残ります。 Ctrl+eを押し続けます。
いくつかのファイルが開いていて、ソースファイルのいずれかに定義を見つけたい場合は、検索> APROPOSを使用できます。