2016-05-31 8 views
3

Ich bin neu in Lisp und versuche zu lernen. Insbesondere versuche ich, die ZeroMQ-Bibliothek zu verwenden, um ein verteiltes System zu erstellen. Das ist mein Sondierungs Code istgemeinsame Lisp Bindings für ZeroMQ

;;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)) 

Im REPL betreibe ich die folgenden Befehle

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

Und dann bekomme ich die folgende Warnung.

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

Obwohl ZMQ: rep aus dem zeromq package exportiert.

Und wenn ich die Warnung ignorieren versuchen (main) zu laufen, bekomme ich die folgenden Fehler

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 

Was mache ich falsch hier?

Antwort

3

Diese Linie

(ZMQ: mit Sockeln (socket Kontext ZMQ: rep)

diesen Fehler

Die Variable ZEROMQ erzeugt. REP ungebunden ist

Bedeutet: es ist eine Variable und es hat keinen Wert. Es spielt keine Rolle, ob das Symbol exportiert wird oder nicht.

Für mich sieht es so aus, als ob der Code ein Schlüsselwort-Symbol :rep als Socket-Typ-Deskriptor anstelle Ihrer zmq:rep erwartet.

Ein anderer Fall eines schlechten Makros, das die erwarteten Typen nicht überprüft.

+0

yup, das war es! Vielen Dank – saq7