<jupyter_start><jupyter_text>SICP 习题 （2.18） 解题总结：反转列表 SICP 习题 2.18 要求我们定义一个过程名叫reverse，可以将一个list反转过来。比如 `(reverse (list 1 4 9 16 25))` 的结果是：`(25 16 9 4 1)`这道题和之前的2.17有相似之处，都是对list进行遍历，然后做相应处理。不过2.17比较简单，遍历到最后面返回最后的元素就好了，2.18复杂一点，需要在遍历之后将list元素反向组装起来。我们可以按以前的思路，通过递归来描述整个过程。其实，`(reverse (list 1 4 9 16 25))`可以表示为`(append (reverse (list 4 9 16 25)) 1)`如此可以一直递归，直到reverse的参数只有一个元素为止。对应的代码如下：<jupyter_code>(define (reverse input-list)
  (if (null? (cdr input-list))
      input-list
      (append (reverse (cdr input-list)) (cons (car input-list) '()))))
(reverse '(1 3 4 29 3 4 5 6))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15081967213114755, 'fraction_numerical': 0.08524590163934426, 'mean_word_length': 6.54320987654321, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '361996', 'license': 'MIT', 'n_tokens_mistral': 400, 'n_tokens_neox': 389, 'n_words': 56, 'path': 'cn/.ipynb_checkpoints/sicp-2-18-checkpoint.ipynb', 'repo_name': 'DamonDeng/sicp_exercise', 'size': '610'}