<jupyter_start><jupyter_text>練習問題2.20⼿続き+, \*, listは任意の数の引数を取る。  このような⼿続きを定義する⽅法のひとつとして、  defineで**ドット末尾記法**(dotted-tail notation)を使うというものがある。  ⼿続きの定義の中で、仮引数リストの最後の仮引数名の前にドットのあるものは、  ⼿続きが呼ばれるときに、  前のほうの仮引数は(もしあれば)  通常通り前のほうの引数の値を持つことになるが、  最後の仮引数の値は残りの引数すべてのリスト(list)となる。  例えば、次のような定義の場合、        (define (f x y . z) ⟨body⟩)    ⼿続きfは、⼆つ以上の引数で呼び出すことができる。  次のもの を評価すると、    (f 1 2 3 4 5 6)      fの本体では、xは1となり、yは2で、zはリスト(3 4 5 6)となる。  次の定義の場合、      (define (g . w) ⟨body⟩)    ⼿続きgは0個以上の引数で呼び出すことができる。次のものを評価すると、    (g 1 2 3 4 5 6)      gの本体では、wはリスト(1 2 3 4 5 6)となる。same-parityは、ひとつ以上の整数を引数として取り、  最初の引数と同じ偶奇性を持つ引数すべてのリストを返す⼿続きとする。  例えば、次のようになる。    (same-parity 1 2 3 4 5 6 7)    (1 3 5 7)    (same-parity 2 3 4 5 6 7)    (2 4 6)    上記の記法を使ってこの⼿続きを書け。<jupyter_code>; 問題文から一つ目の引数は必須である。
; 2つ目からは可変とする。
; 再帰プロセスで記述する。
(define (same-parity top . except-list)
  (let ((mod (% top 2)))
    (define (iter l)
      (if (null? l) '()
          (let ((next (car l)))
            (if (= (% next 2) mod) (cons next (iter (cdr l)))
                (iter (cdr l))
                )
            )
          )
      )
    (cons top (iter except-list))
    )
  )

; 動作確認
(display (same-parity 1 2 3 4 5 6 7))
(newline)
(display (same-parity 2 3 4 5 6 7))
(newline)
(display (same-parity 3 4 5 6 12 15 20 23 30 65 73))
(newline)
(display (same-parity 2))
(newline)<jupyter_output>(1 3 5 7)
(2 4 6)
(3 5 15 23 65 73)
(2)
{'fraction_non_alphanumeric': 0.14183381088825214, 'fraction_numerical': 0.07234957020057306, 'mean_word_length': 2.8591160220994474, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, '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': '135517', 'license': 'CC0-1.0', 'n_tokens_mistral': 980, 'n_tokens_neox': 863, 'n_words': 163, 'path': 'exercises/2.20.ipynb', 'repo_name': 'tokits/sicp-study', 'size': '1396'}