(DEFUN F(L)
(COND
((NULL L) NIL)
((LISTP (CAR L))
(APPEND (F (CAR L))
(F (CDR L))
(CAR (F (CAR L)))))
(T (LIST (CAR L)))
))
此函数返回一个虚线对(如果第一个元素是子列表),子列表的第一个元素作为右侧部分,左侧部分是右侧的元素和列表的第二个元素(如果不是sublist)。现在,如何在不使用(F (CAR L))
的双递归且不使用SET,SETQ,SETF
的情况下重写此内容?
答案 0 :(得分:1)
使用LET
将局部变量绑定到重复的递归调用。
(DEFUN F(L)
(COND
((NULL L) NIL)
((LISTP (CAR L))
(LET ((FCAR (F CAR L)))
(APPEND FCAR
(F (CDR L))
(CAR FCAR))))
(T (LIST (CAR L)))
))