这个是我的代码:(defun reverse-list2 (list)
(if (null list) nil
(cons (reverse-list2 (rest list)) (first list))))我想反转,一个字符串列表。比如(reverse-list2 '("tar" "tip" "net"))希望是("net" "tip" "tar") 这样。结果是:(((NIL . "net") . "tip") . "tar")然后我把代码这样:(defun reverse-list2 (list)
(if (null list) nil
(cons (first list) (reverse-list2 (rest list)))))然后就正常输出,顺序的列表了。这个不理解啊。
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
可以参考我的
(defun my-reverse (lst) (labels ((nxt (lst rst) (if (null lst) rst (nxt (cdr lst) (cons (car lst) rst))))) (nxt lst nil)))
需要注意的是cons是把一个element给cons到一个list前面,你这里的用法是有问题的。
烙印99
TA贡献1829条经验 获得超13个赞
我的解法。首先定義一個 (rcar) 算子,取列表的最後一項。然後定義一個 (rcdr) 算子,取列表除最後一項的其餘項。這兩個算子同 (car) 與 (cdr) 是對稱的。然後使用 (rcar) 與 (rcdr) 定義 (reverse) 算子。(rcar) 和 (rcdr) 兩個算子在其他的地方也可以用到。
(def rcar (lambda [L] (cond [(eq (cdr L) []) (car L)] [#true (*lambda* (cdr L))] ))) (def rcdr (lambda [L] (cond [(eq (cdr L) []) []] [#true (cons (car L) (*lambda* (cdr L)))] ))) (def reverse (lambda [L] (cond [(eq L []) L] [#true (cons (rcar L) (*lambda* (rcdr L)))] )))
添加回答
举报
0/150
提交
取消