小编Azu*_*hts的帖子

let 绑定中的“必需参数不是符号”错误

在下面的代码中,我收到一个Required argument is not a symbol错误。

(defconstant +localhost+ (vector 127 0 0 1))

(defun ip-from-hostname (hostname)
  (sb-bsd-sockets:host-ent-addresses
  (sb-bsd-sockets:get-host-by-name hostname)))

(defun test-connect
    (let ((ip (car (ip-from-hostname "www.google.com")))
              (socket (make-instance 'sb-bsd-sockets:inet-socket :type :stream :protocol :tcp)))
      (sb-bsd-sockets:socket-bind socket +localhost+ 8080)
      (sb-bsd-sockets:socket-connect socket ip)
      (sb-bsd-sockets:socket-send socket "GET / HTTP/1.1" nil)
      (write-line (sb-bsd-sockets:socket-receive socket nil 2048))))

(test-connect)
Run Code Online (Sandbox Code Playgroud)

更完整的错误信息:

Required argument is not a symbol: ((IP
                                       (CAR
                                        (IP-FROM-HOSTNAME "www.google.com")))
                                      (SOCKET
                                       (MAKE-INSTANCE
                                        'SB-BSD-SOCKETS:INET-SOCKET :TYPE
                                        :STREAM :PROTOCOL :TCP)))
Run Code Online (Sandbox Code Playgroud)

我已经将问题缩小到调用部分ip-from-hostname,但奇怪的是在 REPL 中 let 绑定的简化版本:

(let …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp

0
推荐指数
1
解决办法
55
查看次数

标签 统计

common-lisp ×1

sbcl ×1