首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对两个参数专门化泛型函数(Multimethod)

对两个参数专门化泛型函数(Multimethod)
EN

Stack Overflow用户
提问于 2016-08-31 23:00:51
回答 1查看 134关注 0票数 2

我正在尝试用普通的lisp构建一个二进制搜索树。我已经使用CLOS定义了二进制搜索类,如下所示:

代码语言:javascript
复制
(defclass bst ()
  ((root :type node
         :accessor tree-root
         :initform nil
         :initarg root)))

我正在尝试定义一个泛型函数,它接受tree对象和一个键,如果树包含键,则返回布尔值true;如果树不包含键,则返回nil。

现在我有一个泛型函数的定义如下:

代码语言:javascript
复制
(defgeneric contains ((tree bst) (key))
   (:documentation "returns boolean of whether the given tree contains a particular key)

当我将文件加载到REPL (我使用的是SBCL)时,我得到了以下错误:

代码语言:javascript
复制
Required argument is not a symbol: (TREE BST)

我是不是误解了泛型函数的工作原理?我似乎不能正确地定义函数。

EN

回答 1

Stack Overflow用户

发布于 2016-09-01 00:09:31

是的,defgeneric定义了一个泛型函数。您可以在调用defgeneric时指定方法,也可以使用defmethod指定方法。

您需要执行以下操作之一:

代码语言:javascript
复制
(defgeneric contains (tree key)
   (:documentation "returns boolean of whether the given tree contains a particular key")
   (:method ((tree bst) key) ...))

或者:

代码语言:javascript
复制
(defgeneric contains (tree key)
   (:documentation "returns boolean if a given tree contains a given key"))

(defmethod contains ((tree bst) key)
  ...)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39253047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档