Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
如何在Lisp中创建列表对_Lisp - Fatal编程技术网

如何在Lisp中创建列表对

如何在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

我正在尝试使用递归生成带有一个参数的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))

试试这个:

   (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。