<jupyter_start><jupyter_text>2.1.3 データとは何かここではデータとは何かということについて考えます。  2.1.1では、有理数を分子・分母のペアとして考え、- make-rat手続き：コンストラクタ- number手続き：セレクタ(分子を返す)- denom手続き：セレクタ(分母を返す)を使って、有理数演算add-rat, sub-rat等を実装しました。  xをmake-rat手続きで作成した有理数オブジェクト、  数式上、有理数xが$\frac{n}{d} \ (d \neq 0)$と表現されるならば、$$\frac{numer(x)}{denom(x)} = \frac{n}{d}$$を満たす必要があります。  上記の条件は、有理数表現の基礎となるために満たさないといけないただひとつの条件です。  （逆にこの条件を満たしていれば、make-rat,number,denomの内部はどのように実装されていてもかまいません。  　表現方法の自由度については練習問題 2.4～2.6を参照してください。）  ⼀般的に、データというものは、  何らかのセレクタとコンストラクタの集合に加え、  それらが有効な表現となるために満たさなければならないと規定された条件によって定義されるものと考えることができます。  （注釈5では厳密に定式化するのは難しいと言っています）同様に、consで作成される低レベルのオブジェクトについても同様なことが言えます。  ペアについては、  - cons手続き：ペアを構築する- car手続き：ペアの先頭を返す- cdr手続き：ペアの後尾を返すを満たしていればよく、これらは以下のように実装することができます。<jupyter_code>(define (cons x y)
  (define (dispatch m)
    (cond ((= m 0) x)
          ((= m 1) y)
          (else (error "Argument not 0 or 1: CONS" m))))
    dispatch)
; lambda式で定義した場合。上と同義
(define (cons x y)
  (lambda (m)
    (cond ((= m 0) x)
          ((= m 1) y)
          (else (error "Argument not 0 or 1: CONS" m))
        )
      )
  )
(define (car z) (z 0))
(define (cdr z) (z 1))
; 動作確認
(define (make-rat n d)(cons n d))
(define (numer x) (car x))
(define (denom x) (cdr x))
(define (print-rat x)
  (newline)
  (display (numer x))
  (display "/")
  (display (denom x)))
(print-rat (make-rat 2 4))
(print-rat (make-rat -2 4))
(print-rat (make-rat 2 -4))
(print-rat (make-rat -2 -4))<jupyter_output>2/4
-2/4
2/-4
-2/-4
{'fraction_non_alphanumeric': 0.16462585034013605, 'fraction_numerical': 0.02585034013605442, 'mean_word_length': 4.272401433691757, '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': '582007', 'license': 'CC0-1.0', 'n_tokens_mistral': 994, 'n_tokens_neox': 933, 'n_words': 128, 'path': 'texts/2.1.3.ipynb', 'repo_name': 'tokits/sicp-study', 'size': '1470'}