Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp 不是Lisp中所需的类型?_Common Lisp - Fatal编程技术网

Common lisp 不是Lisp中所需的类型?

Common lisp 不是Lisp中所需的类型?,common-lisp,Common Lisp,我正在编写一个程序,它接受一个列表,并将所有元素(无论是atom、cons还是列表)替换为“X”。因此,如果我要用以下公式计算我的函数: ((A B) (C . D) E)) 它会回来的 ((X X) (X . X) X)) 但是,在尝试评估函数时,我不断遇到“X不是预期类型列表”错误。但我不明白为什么。我正在Windows下使用Allegro Common Lisp Express edition。我做错了什么 (defun exify (lst) (exify-aux lst nil

我正在编写一个程序,它接受一个列表,并将所有元素(无论是atom、cons还是列表)替换为“X”。因此,如果我要用以下公式计算我的函数:

((A B) (C . D) E))
它会回来的

((X X) (X . X) X))
但是,在尝试评估函数时,我不断遇到“X不是预期类型列表”错误。但我不明白为什么。我正在Windows下使用Allegro Common Lisp Express edition。我做错了什么

(defun exify (lst)
  (exify-aux lst nil))

(defun exify-aux (lst acc)
  (if (null lst)
      acc
    (if (atom (car lst))
        (append 'x acc)
      (if (consp (car lst))
          (append (cons 'x 'x) acc)
        (if (listp (car lst))
            (append (exify-aux (car lst) nil) acc)
          (if (eq (car lst) nil)
              (append nil acc))))))

  (exify-aux (cdr lst) acc))
(附加'x acc)

那该怎么办?附加获取列表<代码>x是一个符号

另外,
(append nil acc)
的目的是什么?附加空列表没有任何用处<代码>(追加“()”()“()”())只是
()

(追加“x acc”)

那该怎么办?附加获取列表<代码>x是一个符号


另外,
(append nil acc)
的目的是什么?附加空列表没有任何用处<代码>(追加“()”()“()”())只是
()

代码中有很多死代码,实际上这是一个无限循环

(解除退出辅助(lst acc)
如果正确的话,整个街区都不会有任何结果
(如果(空lst)
行政协调会
(如果(原子(汽车lst))
(附加'x acc)
(如有)(消耗(车辆lst))
(附加(cons'x'x)附件)
(如果(列表P(车辆lst))
(附加(退出辅助系统(车辆lst)无)acc)
(如果(等式(轿厢lst)无)
(附件无附件(()())))
这是尾部调用,它被无条件调用
(退出辅助系统(cdr lst)acc)
您需要与
cons
更加亲密

(取消退出(树)
(cond((空树)nil)
((原子树)'x)
(t(cons(exify(car tree))
(退出(cdr树(()())))
如果是,您可能希望执行更高阶的函数:

(取消退出(树)
(收集树木)
(λ()”x);将所有非零叶替换为x
#“反对;反对
零);;复制空页
accumualte树的定义如下:

(定义累积树(树项组合器空值)
(标签)(记录(树)
(cond((空树)空值)
((原子树)(funcall术语树))
(t(funcall组合器(rec(car tree))
(rec(cdr树(()()())))
(记录树)

您的代码中有很多死代码,实际上这是一个无限循环

(解除退出辅助(lst acc)
如果正确的话,整个街区都不会有任何结果
(如果(空lst)
行政协调会
(如果(原子(汽车lst))
(附加'x acc)
(如有)(消耗(车辆lst))
(附加(cons'x'x)附件)
(如果(列表P(车辆lst))
(附加(退出辅助系统(车辆lst)无)acc)
(如果(等式(轿厢lst)无)
(附件无附件(()())))
这是尾部调用,它被无条件调用
(退出辅助系统(cdr lst)acc)
您需要与
cons
更加亲密

(取消退出(树)
(cond((空树)nil)
((原子树)'x)
(t(cons(exify(car tree))
(退出(cdr树(()())))
如果是,您可能希望执行更高阶的函数:

(取消退出(树)
(收集树木)
(λ()”x);将所有非零叶替换为x
#“反对;反对
零);;复制空页
accumualte树的定义如下:

(定义累积树(树项组合器空值)
(标签)(记录(树)
(cond((空树)空值)
((原子树)(funcall术语树))
(t(funcall组合器(rec(car tree))
(rec(cdr树(()()())))
(记录树)

据我所知,append将能够处理符号。我还可以用什么在acc列表中添加符号?@OrangeCalx01为什么你这么理解?附加附加列表<代码>x不是一个列表。为什么要这样做?
append
:有关于符号的内容吗?@OrangeCalx01:append列表。用符号列一个清单。另请参见函数
cons
,了解您可能要查找的函数…@OrangeCalx01:解释
(append(list'x)foo)
(cons'x foo)
;-)@OrangeCalx01:你得到了一个无限循环,因为你每次在最后一行再次调用
exify aux
。据我所知,append将能够处理符号。我还可以用什么在acc列表中添加符号?@OrangeCalx01为什么你这么理解?附加附加列表<代码>x不是一个列表。为什么要这样做?
append
:有关于符号的内容吗?@OrangeCalx01:append列表。用符号列一个清单。另请参见函数
cons
,了解您可能要查找的函数…@OrangeCalx01:解释
(append(list'x)foo)
(cons'x foo)
;-)@OrangeCalx01:由于每次在最后一行再次调用
exify aux
,您将得到一个无限循环。