判断是否“升序”
这里的规则是只要不是降序,就是“升序”
有些特殊情况值得说明:空表——true、前后数字相同——true
我在做作业的时候忽略了判断只有一个元素的列表的情况
对于这种递归做法的题目,我认为从递归条件推到终止条件可以有效减少错误
手搓 filter
其实 scheme 里有 filter 这一个内置函数,用于筛选列表中的元素,但这里手搓一个
其实跟上面的有些相似的,主要就是注意 cons 的用法,避免把新列表中元素之间的并列关系搞成了嵌套关系
交叉合并 list
这里其实感觉自己做的比较巧妙,由于新 list 的首项是 lst1 的首项,因而先判断 lst1 是否为空表
是的话直接返回 lst2
否的话取出首项,开始构建新list
然后利用递归,交换 lst2 与 cdr lst1 的顺序,即可减少一次对于 lst2 的判断
去除重复项的 list
惯例,先判断是否为空表
接着把首元素放进新表,运用递归
在递归之前,先用 filter 筛一遍元素,把首元素(也就是已经放进新表的元素)去除,避免重复