猿问

lisp里面反转一个列表里面的值?递归实现有问题啊

这个是我的代码:(defunreverse-list2(list)
(if(nulllist)nil
(cons(reverse-list2(restlist))(firstlist))))我想反转,一个字符串列表。比如(reverse-list2'("tar""tip""net"))
希望是("net""tip""tar")这样。
结果是:(((NIL."net")."tip")."tar")然后我把代码这样:(defunreverse-list2(list)
(if(nulllist)nil
(cons(firstlist)(reverse-list2(restlist)))))然后就正常输出,顺序的列表了。
这个不理解啊。
慕婉清6462132
浏览 520回答 2
2回答

绝地无双

可以参考我的(defunmy-reverse(lst)(labels((nxt(lstrst)(if(nulllst)rst(nxt(cdrlst)(cons(carlst)rst)))))(nxtlstnil)))需要注意的是cons是把一个element给cons到一个list前面,你这里的用法是有问题的。

守着一只汪

我的解法。首先定義一個(rcar)算子,取列表的最後一項。然後定義一個(rcdr)算子,取列表除最後一項的其餘項。這兩個算子同(car)與(cdr)是對稱的。然後使用(rcar)與(rcdr)定義(reverse)算子。(rcar)和(rcdr)兩個算子在其他的地方也可以用到。(defrcar(lambda[L](cond[(eq(cdrL)[])(carL)][#true(*lambda*(cdrL))])))(defrcdr(lambda[L](cond[(eq(cdrL)[])[]][#true(cons(carL)(*lambda*(cdrL)))])))(defreverse(lambda[L](cond[(eqL[])L][#true(cons(rcarL)(*lambda*(rcdrL)))])))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答