这个是我的代码:(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)))))然后就正常输出,顺序的列表了。这个不理解啊。
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
可以参考我的(defunmy-reverse(lst)(labels((nxt(lstrst)(if(nulllst)rst(nxt(cdrlst)(cons(carlst)rst)))))(nxtlstnil)))需要注意的是cons是把一个element给cons到一个list前面,你这里的用法是有问题的。
ITMISS
TA贡献1871条经验 获得超8个赞
我的解法。首先定義一個(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)))])))
添加回答
举报
0/150
提交
取消