ソケットで使用するために、SBCLの非標準ビルトインからいくつかの関数をインポートしようとしています。スライムの外でこれを行うと、裸のインタラクティブシェル+ SBCLで機能しますが、SLIMEでは機能しません。
私がしたこと:
(import 'sb-bsd-sockets:host-ent-address)
(import 'sb-bsd-sockets:get-host-by-name)
また
(use-package :sb-bsd-sockets)
いずれかを実行した後、SLIMEは、すでにcl-userパッケージに含まれているものをインポートしようとしているというエラーで私に挨拶します。これは修正可能なエラーであり、sb-bsd-socketsパッケージにある記号を選択して修正します。それ以上のエラーは続きません。
次に、関数をコンパイルしようとすると、次のようになります。
(defun nslookup (hostname)
(if hostname
(sb-bsd-sockets:host-ent-address (sb-bsd-sockets:get-host-by-name hostname))
nil))
できます。しかし、これをコンパイルしようとすると:
(defun nslookup-1 (hostname)
(if hostname
(host-ent-address (get-host-by-name hostname))
nil))
次に、未定義の関数に関する警告と、を呼び出そうとするとエラーが発生しますnslookup-1
。
驚いたことに、REPLでこれを実行しようとすると:
CL-USER> #'host-ent-address
#<STANDARD-GENERIC-FUNCTION HOST-ENT-ADDRESS (1)>
CL-USER>
できます"。つまり、機能は知っていますが、使用しないことにしました...
パッケージをSLIMEのREPLにインポートするか、少なくともそれらのパッケージからシンボルをインポートするための(特別な?)方法が必要です。そうでない場合、テストに長い名前を使用してから実際のプログラムに置き換えるのは非常に不便です...