Lisp宏 - 如何正确输入类型

时间:2014-11-13 23:06:45

标签: json macros lisp

我是宏的新手,并且在JSON-RPC宏中苦苦挣扎。

要求提供类型,我不知道如何正确输入。

(defmacro defun-json-rpc (name type lambda-list &body body)
  "Defines a function and registers it as a json-rpc target."   
   (unless (json-rpc-encoding-p type)    
   (error "New version of defun-json-rpc requires a TYPE argument"))   
  `(progn    
     (defun ,name ,lambda-list ,@body)   
     (export-as-json-rpc ',name (lisp-to-camel-case (symbol-name ',name)) ,type)))

我发现的一段示例代码如下,但它不包含类型参数:

(json-rpc:defun-json-rpc add (x y)
  (+ x y))

我如何输入类型?

1 个答案:

答案 0 :(得分:0)

找到它。它是一个特定于JSON-RPC的关键字,而不是一个lisp类型。我只需要查看json-rpc-encoding-p,看看只有3个关键字是有效的。

(defgeneric json-rpc-encoding-p (keyword)
  (:documentation "Is KEYWORD a valid JSON-RPC value encoding?")
  (:method (keyword)
     "Default is no."
     (declare (ignore keyword))
      nil)
  ;;; built-in methods
  (:method ((keyword (eql :guessing)))
    t)
  (:method ((keyword (eql :streaming)))
    t)
  (:method ((keyword (eql :explicit)))
    t))