μ½”λ“œλͺ½ν‚€λΌλŠ” 단어에 λΆˆμΎŒκ°μ„ λŠλΌλŠ” μ‚¬λžŒμ΄ 있고, SICP 책을 λ…ν•™ν•˜λ©° λ‚΄μš©μ •λ¦¬ν•˜κ³  μžˆλ‹€λŠ”κ±Έ λͺ¨λ₯΄λŠ” μ‚¬λžŒλ„ λ§Žμ•„λ³΄μ˜€μœΌλ―€λ‘œ

"μ½”λ“œλͺ½ν‚€ λ²—μ–΄λ‚˜κΈ°" μ—μ„œ "SICP 독학" 으둜 제λͺ© λ³€κ²½.



μ—¬νƒœκΉŒμ§€ μš”μ•½.


ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ, κ·Έ μ–Έμ–΄κ°€ μ–΄λ–»κ²Œ 데이터와 ν”„λ‘œμ‹œμ Έλ₯Ό λ‹€λ£¨λŠ”μ§€ κΈ°μ΄ˆλΆ€ν„° λΉŒλ“œμ—…μ€‘.

챕터 1μ—μ„œλŠ” ν”„λ‘œμ‹œμ Έμ˜ 좔상화λ₯Ό 톡해 μ–Έμ–΄μ˜ ν‘œν˜„λ ₯을 λ†’μ΄λŠ” 법을 λ°°μ› κ³ ,

μ˜€λŠ˜λΆ€ν„°λŠ” 챕터 2의 데이터λ₯Ό ν†΅ν•œ 좔상화λ₯Ό 배움.


-------------------------------


챕터 1μ—μ„œλŠ” ν”„λ¦¬λ―Έν‹°λΈŒ 데이터 (숫자)λ₯Ό κ°€μ§€κ³  μ•Œκ³ λ¦¬μ¦˜μ„ λ§Œλ“€μ—ˆμ§€λ§Œ, 챕터 2μ—μ„œ λΆ€ν„°λŠ” μ»΄νŒŒμš΄λ“œ 데이터λ₯Ό μ΄μš©ν•΄ λ°μ΄ν„°μ˜ 좔상화λ₯Ό ν•œλ‹€.

μ»΄νŒŒμš΄λ“œ λ°μ΄ν„°λž€ μ—¬λŸ¬κ°œμ˜ 데이터λ₯Ό ν•˜λ‚˜μ˜ λ°μ΄ν„°λ‘œ 묢은것.


λ°μ΄ν„°μ˜ μΆ”μƒν™”λž€, 데이터가 ꡬ체적으둜 μ–΄λ–»κ²Œ λ§Œλ“€μ–΄μ§€λŠ”μ§€λ₯Ό 숨기고 데이터 κ·Έ 자체의 μ‚¬μš©λ²•λ§Œ 생각할 수 μžˆλ„λ‘ ν•˜λŠ”κ²ƒμ΄λ‹€.

예λ₯Ό λ“€μ–΄μ„œ 유리수의 사칙연산을 κ΅¬ν˜„ν•œλ‹€κ³  ν•  λ•Œ,

μœ λ¦¬μˆ˜λΌλŠ” 데이터λ₯Ό μ–΄λ–»κ²Œ λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”μ§€ κ°€μž₯ ꡬ체적인 뢀뢄은 λ”°λ‘œ μƒκ°ν•˜κ³ ,

μœ λ¦¬μˆ˜λΌλŠ” 좔상적인 데이터가 μžˆλ‹€κ³  μƒκ°ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ μ„€κ³„ν•˜λŠ”κ²ƒ.

즉, μœ λ¦¬μˆ˜λΌλŠ” 좔상적인 데이터λ₯Ό κ°€μ§€κ³  ν”„λ‘œκ·Έλž¨μ„ μ§œλŠ” λΆ€λΆ„κ³Ό,

유리수 데이터λ₯Ό μ–΄λ–»κ²Œ κ΅¬ν˜„ν• κ²ƒμΈκ°€λ₯Ό λ”°λ‘œ λ…λ¦½μ‹œν‚¨λ‹€λŠ” 것이닀.


μ΄λ ‡κ²Œ λ°μ΄ν„°μ˜ 좔상화λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž¨μ˜ 섀계λ₯Ό λ°μ΄ν„°μ˜ 좔상화가 κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ”κ²ƒμ΄ μ€‘μš”.

이 λ°‘μœΌλ‘œλŠ” μ‹€μ œλ‘œ 유리수의 사칙연산을 κ΅¬ν˜„ν•΄μ„œ λ°μ΄ν„°μ˜ 좔상화λ₯Ό μ΄μš©ν•œ ν”„λ‘œκ·Έλž¨ 섀계λ₯Ό ν•΄ 보도둝 ν•œλ‹€.



--------------------------------

유리수의 μ‚¬μΉ™μ—°μ‚°μœΌλ‘œ λ§μ…ˆ λΊ„μ…ˆ κ³±μ…‰ λ‚˜λˆ—μ…ˆ, 그리고 두 μœ λ¦¬μˆ˜κ°€ 같은지 λ‹€λ₯Έμ§€ λΉ„κ΅ν•˜λŠ” 연산을 κ΅¬ν˜„ν•œλ‹€.

이 ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ, wishful thinking μ΄λΌλŠ” 사고방식을 μ‚¬μš©ν•œλ‹€.

Wishful thinking μ΄λž€ 큰 κ°œλ…λΆ€ν„° 틀을 μž‘μ•„ μƒκ°ν•˜κ³  ꡬ체적인 κ΅¬ν˜„λ°©λ²•μ€ λ‚˜μ€‘μ— μƒκ°ν•˜λŠ” νƒ‘λ‹€μš΄ ν˜•μ‹μ˜ 사고방식이닀.


λ¨Όμ € μœ λ¦¬μˆ˜λΌλŠ” 데이터가 μ•„λž˜μ™€ 같은 것이 κ°€λŠ₯ν•˜λ‹€ κ°€μ •ν•œλ‹€.

1. 유리수 λ°μ΄ν„°λŠ” λΆ„λͺ¨μ™€ λΆ„μžλ‘œ 이루어져 μžˆλ‹€.

2. 유리수 λ°μ΄ν„°μ—μ„œ λΆ„λͺ¨λ₯Ό μΆ”μΆœν•  수 있고, λΆ„μžλ₯Ό μΆ”μΆœν•  수 μžˆλ‹€.


ꡬ체적인 κ΅¬ν˜„λ°©λ²•μ€ λ‚˜μ€‘μ— μƒκ°ν•˜κΈ°λ‘œ ν•˜κ³ ,

유리수 데이터λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν•¨μˆ˜ (μ»¨μŠ€νŠΈλŸ­ν„°)λŠ” μ•„λž˜μ™€ κ°™λ‹€κ³  κ°€μ •ν•˜κ³ , (n은 λΆ„μž, dλŠ” λΆ„λͺ¨ )

(make-rat <n> <d>)

유리수 λ°μ΄ν„°μ—μ„œ λΆ„μžλ₯Ό μ„ νƒν•˜λŠ” ν•¨μˆ˜(μ…€λ ‰ν„°)λŠ” μ•„λž˜μ™€ κ°™λ‹€κ³  κ°€μ •ν•˜κ³  (xλŠ” 유리수 데이터 )

(numer <x>)

유리수 λ°μ΄ν„°μ—μ„œ λΆ„λͺ¨λ₯Ό μΆ”μΆœν•˜λŠ” ν•¨μˆ˜(μ…€λ ‰ν„°)λŠ” μ•„λž˜μ™€ κ°™λ‹€κ³  κ°€μ •ν•œλ‹€. (xλŠ” 유리수 데이터 )

(denom <x>)


μ—¬κΈ°μ„œ μ€‘μš”ν•œμ μ€ μœ„μ˜ ν•¨μˆ˜λ₯Ό μ–΄λ–»κ²Œ κ΅¬ν˜„ν• μ§€ ꡬ체적인 방법은 ν•˜λ‚˜λ„ 생각을 ν•˜μ§€ μ•Šμ•˜λ‹€λŠ”κ²ƒ.

ν•˜μ§€λ§Œ μœ„μ˜ ν•¨μˆ˜λ“€λ§Œ μžˆλ‹€λ©΄ μ•„λž˜μ˜ 유리수 사칙연산을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ”κ²ƒμ„ μ•Œ 수 μžˆλ‹€.


2cf3c028e2f206a26d81f6ed4f8575


이 사칙연산듀을 μœ„μ˜ μ„Έκ°€μ§€ ν”„λ‘œμ‹œμ Έλ‘œ λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.


2cf3c028e2f206a26d81f6e744847c64



μ΄λ ‡κ²Œ make-rat, numer, denom을 κ΅¬ν˜„ν•˜κΈ° 전에 좔상적인 λ°μ΄ν„°λ§ŒμœΌλ‘œ λ¨Όμ € λŒ€λž΅μ μΈ 틀은 λ§Œλ“€μ—ˆλ‹€.

이제 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ 유리수 데이터λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•  μ§€ 생각해야 ν•œλ‹€.

유리수 λ°μ΄ν„°λŠ” λΆ„λͺ¨μ™€ λΆ„μžμ˜ νŽ˜μ–΄μ΄κ³ , 이 νŽ˜μ–΄μ—μ„œ 각각의 λΆ„μž λΆ„λͺ¨λ₯Ό μΆ”μΆœν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?

라고 κ΅¬ν˜„ 방법을 고민해보면 lisp μ—μ„œ pairλΌλŠ” νŽΈλ¦¬ν•œ 데이터 ꡬ쑰가 μžˆλ‹€λŠ”κ²ƒ.


lisp μ—μ„œλŠ” pair λΌλŠ” 데이터 ꡬ쑰λ₯Ό μ œκ³΅ν•˜λŠ”λ°, 파이썬의 Tuple 같이 λ‘κ°œμ˜ 데이터λ₯Ό νŽ˜μ–΄λ‘œ λ¬Άμ–΄μ£ΌλŠ” 데이터 ꡬ쑰이닀.

이 pair λ₯Ό μƒμ„±ν•˜λŠ” ν”„λ‘œμ‹œμ ΈλŠ” cons 이고, pair μ—μ„œ 첫번째 μ•„μ΄ν…œμ„ μΆ”μΆœν•˜λŠ” ν”„λ‘œμ‹œμ ΈλŠ” car, λ‘λ²ˆμ§Έ μ•„μ΄ν…œμ„ μΆ”μΆœν•˜λŠ” ν”„λ‘œμ‹œμ ΈλŠ” car이닀.

κ·ΈλŸ¬λ‹ˆκΉŒ (1, 2) pairλ₯Ό μƒμ„±ν•˜κ³  μ•žμ˜ μ•„μ΄ν…œκ³Ό λ’€μ˜ μ•„μ΄ν…œμ„ μΆ”μΆœν•˜λŠ”κ²ƒμ„ μ½”λ“œλ‘œ λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.


2cf3c028e2f206a26d81f6e1468771


pair 의 μ•„μ΄ν…œμ„ pair둜 ν•˜λŠ”κ²ƒλ„ κ°€λŠ₯.


2cf3c028e2f206a26d81f6e0438674

이 pair둜 λ§Œλ“€μ–΄μ§„ 데이터λ₯Ό 리슀트 데이터 ꡬ쑰라고 λΆ€λ₯Έλ‹€


μ—¬ν•˜νŠΌ, 이 pair둜 유리수 데이터λ₯Ό κ΅¬ν˜„ κ°€λŠ₯ν•  κ²ƒμœΌλ‘œ 보인닀.

pair둜 μœ„μ˜ μ„Έκ°€μ§€ ν•¨μˆ˜, make-rat, numer, denum 을 κ΅¬ν˜„ν•΄λ³΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.


2cf3c028e2f206a26d81f6e0438577

μ΄λ ‡κ²Œ μ²˜μŒμ— 유리수의 사칙연산을 좔상적인 유리수 λ°μ΄ν„°λ‘œ λ¨Όμ € 틀을 μž‘μ•˜κ³ ,

κ·Έ 뒀에 유리수 데이터λ₯Ό ꡬ체적으둜 κ΅¬ν˜„ν–ˆλ‹€.


μ‹€μ œλ‘œ 유리수의 사칙연산을 μ‹€ν–‰ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό ν”„λ¦°νŠΈ ν•˜κΈ°μœ„ν•΄ λ°‘μ˜ 헬퍼 ν”„λ‘œμ‹œμ Έλ₯Ό 이용,


2cf3c028e2f206a26d81f6e3458673


좜λ ₯해보면 μ•„λž˜μ™€ κ°™λ‹€.


2cf3c028e2f206a26d81f6e440847d68

μ—¬κΈ°μ„œ μ£Όλͺ©ν•΄μ•Ό ν•  점이, 유리수의 사칙연산과 λ°μ΄ν„°μ˜ ꡬ체적인 κ΅¬ν˜„μ€ μ„œλ‘œ λ…λ¦½λ˜μ–΄ μžˆλ‹€λŠ”κ²ƒ.

유리수의 사칙연산 ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•Œ, 좔상적인 데이터λ₯Ό μ‚¬μš©ν•΄μ„œ 이 λ°μ΄ν„°μ˜ ꡬ체적인 λ‚΄μš©κ³Ό 사칙연산은 μ˜μ‘΄μ„±μ΄ μ—†λ‹€λŠ”κ²ƒμ΄λ‹€.


그것을 보여주기 μœ„ν•΄ make-rat 을 λ³€ν˜•μ‹œμΌœλ³Έλ‹€.

μœ„μ˜ μ˜ˆμ— 보면 6/9 같은 계산 κ²°κ³Όλ₯Ό κΈ°μ•½λΆ„μˆ˜λ‘œ ν‘œν˜„ν•˜κ³  μ‹Άλ‹€κ³  ν•˜μž.

그럴경우 유리수의 사칙연산은 κ·ΈλŒ€λ‘œ 두고, make-rat만 손을 λŒ€λ©΄ κ°„λ‹¨νžˆ κ°€λŠ₯.


gdcλ₯Ό μ΅œλŒ€ 곡배수λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜λΌκ³  κ°€μ •ν•˜λ©΄ μ•„λž˜μ™€ 같이 make-rat을 λ³€κ²½ν•˜λ©΄ 항상 κΈ°μ•½λΆ„μˆ˜κ°€ λ§Œλ“€μ–΄μ§€κ²Œ λœλ‹€.


2cf3c028e2f206a26d81f6e0418077

κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.


2cf3c028e2f206a26d81f6e6478973

μ΄λ ‡κ²Œ λ°μ΄ν„°μ˜ 좔상화λ₯Ό 톡해 λ°μ΄ν„°μ˜ κ΅¬μ œμ²™μΈ κ΅¬ν˜„κ³Ό μ‚¬μš©ν•˜λŠ”κ²ƒμ„ λ…λ¦½μ‹œν‚€λŠ”κ²ƒμ„ λ°°μ› μŒ.

였늘 κ΅¬ν˜„ν•œ 방법을 보면 λ°μ΄ν„°μ˜ ꡬ체적인 κ΅¬ν˜„κ³Ό μ‚¬μΉ™μ—°μ‚°μ˜ κ΅¬ν˜„μ„ λ…λ¦½μ‹œν‚€λŠ”λ°, 그것을 abstract barrier 라고 λΆ€λ₯΄λŠ” λͺ¨μ–‘.

λ‹€μŒ κΈ€μ—μ„œλŠ” abstract barrier 에 λŒ€ν•œ 뢀뢄을 μš”μ•½ 정리함.


μ˜€λŠ˜μ€ μ—¬κΈ°κΉŒμ§€.