這個是我的代碼:(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
提交
取消