2016-05-31 54 views
3

我是Lisp的新手,正在努力學習。特別是,我正嘗試使用ZeroMQ庫來製作分佈式系統。 這是我探索的代碼ZeroMQ的通用lisp綁定

;;hwserver.lisp 
(defun main() 
    ;; prepare contexts 
    (zmq:with-context (context) 
    (zmq:with-socket (socket context zmq:rep) 
     (zmq:bind socket "tcp://*5555") 

     (loop 
    (let ((request (make-instance 'zmq:msg))) 

     ;; wait for next request from client 
     (zmq:recv socket request) 
     (print "received request: [~A]~%" 
      (zmq:msg-data-as-string request)) 

     ;;do some work 
     (sleep 1) 

     ;;send reply back to client 
     (let ((reply (make-instance 'zmq:msg :data "Hello World"))) 
     (zmq:send socket reply)))))) 
    (sb-ext:exit)) 

在REPL,我運行以下命令

(ql:quickload "zeromq") 
(load "hwserver.lisp") 

然後我得到以下警告。

; 
; caught WARNING: 
; undefined variable: ZEROMQ:REP 
; 
; compilation unit finished 
; Undefined variable: 
;  ZEROMQ:REP 
; caught 1 WARNING condition 

雖然ZMQ:代表從zeromq package出口。

如果我忽略警告嘗試運行(main),我得到以下錯誤

The variable ZEROMQ:REP is unbound. 
    [Condition of type UNBOUND-VARIABLE] 

Restarts: 
0: [RETRY] Retry SLIME REPL evaluation request. 
1: [*ABORT] Return to SLIME's top level. 
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {10039B0003}>) 

Backtrace: 
    ;; backtrace omitted for being uninteresting here 

什麼我錯在這裏做什麼?

回答

3

此行

(ZMQ:用插座(插座上下文ZMQ:REP)

創建此錯誤

可變ZEROMQ:REP是未結合的

意思是:它是一個變量它沒有價值。符號是否被導出並不重要。

對我來說,它看起來像代碼期望關鍵字符號:rep作爲套接字類型描述符而不是您的zmq:rep

壞宏的另一種情況是不檢查它期望的類型。

+0

是的,就是這樣!謝謝一堆 – saq7