常见的口齿不清conun in defun

时间:2016-04-12 13:55:39

标签: lisp common-lisp

我正在制作插入列表功能。它看起来像:

(defun INSERT1 (x y)
(setq temp (list x y))
(setq k (sort temp #'< :key #'car)))

(defun INSERT2 (x y)
(setq temp (cons x y))
(setq k (sort temp #'< :key #'car)))

我必须结合这两个功能。 第一个插入功能在&#39; k&#39;中没有任何内容时起作用。当第二个插入单元功能在&#39; k&#39;。

中有任何元素时起作用 我认为我需要使用“cond&#39;”,我认为&#39; cond&#39;是

(cond ((true/false)if true execute here and return)
      ((true/false)if true execute here and return)
      ......
      ((true/false)if true execute here and return))

所以我这样做了:

(defun INSERT1 (x y)
(setq temp (list x y))
(setq k (sort temp #'< :key #'car)))

(defun INSERT2 (x y)
(setq temp (cons x y))
(setq k (sort temp #'< :key #'car)))

(defun INSERTCELL (x y)
(setq temp nil)
(cond
((eq (car temp) nil) (INSERT1 (x y))
(t (INSERT2 (x y))))))

和错误:

*** - EVAL: undefined function X

我如何使用&cond&#39;在这个没有错误的问题上......

请教我正确的代码。

1 个答案:

答案 0 :(得分:0)

在Common Lisp(和其他一般的lisps)中,(foo ...)总是意味着以下之一:

  • 调用功能FOO
  • 展开宏FOO
  • 使用特殊操作员FOO
  • 执行某些操作

如果您习惯使用非lisp编程语言,那么您通常写为foo(...)的内容为(foo ...)