如何在Lisp中创建列表对
我正在尝试使用递归生成带有一个参数的pair函数。 但我不知道如何解决这个问题。 这是我的密码:如何在Lisp中创建列表对,lisp,Lisp,我正在尝试使用递归生成带有一个参数的pair函数。 但我不知道如何解决这个问题。 这是我的密码: (defun makepair (l) (cond ((null l) nil) ((and (atom (car l)) (atom (cdr l))) (list (car l) (cdr l))) (t (makepair (cdr l))) ) ) 我必须把(1D2C)改成((1D)(12)(1C)(D2)(DC)(2C))试试这个: (def
(defun makepair (l)
(cond ((null l) nil)
((and (atom (car l)) (atom (cdr l))) (list (car l) (cdr l)))
(t (makepair (cdr l)))
)
)
我必须把(1D2C)改成((1D)(12)(1C)(D2)(DC)(2C))
试试这个:
(defun makepair (l)
(if (atom l) nil
(append (loop for i in (rest l)
collecting (list (car l) i))
(makepair (rest l)))))
试试这个:
(defun makepair (l)
(if (atom l) nil
(append (loop for i in (rest l)
collecting (list (car l) i))
(makepair (rest l)))))
递归版本(根据需要)如下所示:
(defun make-pair (l)
(when (and l (cdr l))
(append (mapcar #'(lambda (x) (list (car l) x)) (cdr l))
(make-pair (cdr l)))))
(make-pair '(1 d 2 c)) => ((1 D) (1 2) (1 C) (D 2) (D C) (2 C))
递归版本(根据需要)如下所示:
(defun make-pair (l)
(when (and l (cdr l))
(append (mapcar #'(lambda (x) (list (car l) x)) (cdr l))
(make-pair (cdr l)))))
(make-pair '(1 d 2 c)) => ((1 D) (1 2) (1 C) (D 2) (D C) (2 C))
你的代码有什么不对?(<代码> MAPCON/<代码>:对于每一个列表,考虑它的CARD和CDR。将CDR的每个元素映射到一对Car。您的代码有什么问题?它不起作用:(代码< MavCon < /代码>):对于每个列表,考虑它的CARD和CDR。将CDR的每个元素映射为一对CARR。