SICP : Structure and Interpretation of Computer Programs
#래킷 #클로저 sicp-notes
[2024-11-12 Tue 15:50]
상당히 잘 정리가 되어있는 노트다. 래킷으로 되어 있고 클로저로 활용하면 된다.
클로저 컴퓨터 대수학 시스템 혁신 을 위한 일이다.
잠시만, 배움은 일단 기호를 입력 할 수 있어야 된다. 용어를 다룰 수 있어야 공통의 지식을 채워나갈 수 있는 것이다.
sicp에서 기본을 다룬다. 어찌보면 다른 레퍼런스 없이 완결된 지식 세트라고 볼 수 있다. 여기에 클로저는? 클로저는 모르겠다. 실용적이다. 이게 어찌보면 큰 그림이기도 하다. 놀라운 일이다. 놀라운 일이기에 감사하다.
클로저 코드로 작업한 파일들이 있다. 러시아 등등 뭐 신경쓸거 없다. 아. 노트는 하나 있는데 그게 자기완결성이 있다.
"#racket #sicp Structure and Interpretation of Computer Programs 1986 Video Notes"
(“#Racket #Sicp Structure and Interpretation of Computer Programs 1986 Video Notes” n.d.)
여기 말이다.
이건 영상20강을 요약한 것. 책 보다. 훨씬 짧다. 아. 그리고 래킷에서 sicp 서브셋은 일부로 내놓은 것인데. 아 매력있는 것. 한번 보자. 이 친구 비디오노트파일은 자기완결성이 있다. 훌륭한 레포트 양식이다. racket을 다시 활성화 하자.
설치는 둠이맥스 모듈 사용 /home/junghan/sync/man/dotsamples/vanilla/hamacs-evil/ha-programming-scheme.org
Try It Out
Working for values?
Working for output?
,#+results:
The interface is horrendously slow, as the :session
doesn’t seem to work, and starting up a Racket REPL takes a long time.
SICP and Racket
If using Racket for SICP, install the SICP language:
We now can give it a #lang sicp
(or better yet, use the :lang
header) to define certain SICP-specify features:
이제 #lang sicp=(또는 =:lang
헤더를 사용하는 것이 더 좋습니다)를 지정하여 특정 SICP 지정 기능을 정의할 수 있습니다:
Let’s try this now:
,#+results:
(해럴드 애빌슨, 제럴드 제이 서스먼, and 줄리 서스먼 2016) "SICP 컴퓨터 프로그램의 구조와 해석" 해럴드 애빌슨 and 제럴드 제이 서스먼 and 줄리 서스먼 2016 이광근
- 마법사 책(Wizard Book)이라는 별명으로도 유명한 이 책은 독특하기로 소문난, MIT 컴퓨터 과학 입문 교과 과정에서 쓰는 교과서로, 프로그래밍 언어 문법이 아닌 프로그램의 뼈대를 구성하는 기술을 익히게 해준다. 흔한 프로그래밍 입문서와 달리, 난해하다는 평을 듣는 LISP에서 갈라져 나온 Scheme을 활용하며, 요약(abstraction)과 조립식 설계(modularity)에 따라 복잡한 프로그램을 간단하게 짜는 전략을 보여준다. 그뿐 아니라, 상태(state)가 있는 물체, 덮어쓰기(assignment), 병행 프로그래밍, 함수 프로그래밍, 제때 계산법(lazy evaluation), 비결정적 프로그래밍(non-deterministic programming) 등 다양한 프로그래밍 이슈를 살펴보며 한 걸음씩 프로그램을 설계하고 짜 맞추고 살펴보고 고쳐 쓰면서, ’과연 프로그래밍이란 무엇인가’ 돌이켜 보게 하고, 생각하는 방식과 그 생각을 표현하는 방식을 가르쳐 준다.
"자바스크립트로 배우는 SICP : 컴퓨터 프로그램의 구조와 해석"
(해럴드 에이블슨 et al. 2022)
- "자바스크립트로 배우는 SICP : 컴퓨터 프로그램의 구조와 해석" 해럴드 에이블슨 and 제럴드 제이 서스먼 and 마틴 헨즈 and 토비아스 브릭스타드 and 줄리 서스먼 2022 류광
- 모든 프로그래머는 마법사다난해한 프로그래밍 언어로 만들어진 컴퓨터 프로그램. 프로그램은 일정한 패턴을 따라 주어진 과제를 해결해 나간다. 즉, 프로그래머는 프로그램이라는 주문을 외워 컴퓨터에 깃든 영혼을 부리는 마법사인 셈이다. 여기 모든 마법사를 위한 마법사...
제1장 함수를 이용한 추상화
1 Building Abstractions with Procedures / Functions
1.1 프로그래밍의 기본 요소
1.1.1 표현식 1.1.2 이름 붙이기와 환경 1.1.3 연산자 조합의 평가 1.1.4 복합 함수 1.1.5 함수 적용의 치환 모형 1.1.6 조건부 표현식과 술어 1.1.7 예제: 뉴턴 방법으로 제곱근 구하기 1.1.8 블랙박스 추상으로서의 함수
1.2 함수와 과정(함수가 생성하는)
1.2.1 선형 재귀와 반복 1.2.2 트리 재귀 1.2.3 증가 차수 1.2.4 거듭제곱 1.2.5 최대공약수 1.2.6 예제: 소수 판정
1.3 고차 함수를 이용한 추상의 정식화
1.3.1 함수를 받는 함수 1.3.2 람다 표현식을 이용한 함수 구축 1.3.3 일반적 방법으로서의 함수 1.3.4 함수를 돌려주는 함수
제2장 데이터를 이용한 추상화
2.1 데이터 추상화
2.1.1 예제: 유리수 산술 연산 2.1.2 추상화 장벽 2.1.3 데이터란 무엇인가? 2.1.4 심화 연습문제: 구간 산술 2.2 위계적 데이터와 닫힘 성질 2.2.1 순차열의 표현 2.2.2 위계적 구조 2.2.3 합의된 인터페이스로서의 순차열 2.2.4 예제: 그림 언어
2.3 기호 데이터
2.3.1 문자열 2.3.2 예제: 기호 미분 2.3.3 예제: 집합의 표현 2.3.4 허프먼 부호화 트리
2.4 추상 데이터의 다중 표현
2.4.1 복소수의 여러 표현 2.4.2 태그된 데이터 2.4.3 데이터 지향적 프로그래밍과 가산성
2.5 일반적 연산을 갖춘 시스템
2.5.1 일반적 산술 연산 2.5.2 형식이 서로 다른 데이터 객체들의 결합 2.5.3 예제: 기호 대수
제3장 모듈성, 객체, 상태
3.1 배정과 지역 상태
3.1.1 지역 상태 변수 3.1.2 배정 도입의 이득 3.1.3 배정 도입의 비용 3.2 평가의 환경 모형 3.2.1 평가 규칙들 3.2.2 간단한 함수 적용의 예 3.2.3 지역 상태 저장소로서의 프레임 3.2.4 내부 선언 3.3 변경 가능 데이터를 이용한 모형화 3.3.1 변경 가능 목록 구조 3.3.2 대기열의 표현 3.3.3 테이블의 표현 3.3.4 디지털 회로 시뮬레이터 3.3.5 제약의 전파 3.4 동시성: 시간은 필수요건이다 3.4.1 동시적 시스템에서 시간의 본질 3.4.2 동시성 제어 메커니즘 3.5 스트림 3.5.1 지연 평가를 이용한 스트림 표현 3.5.2 무한 스트림 3.5.3 스트림 패러다임의 활용 3.5.4 스트림과 지연 평가 3.5.5 함수형 프로그램의 모듈성과 객체의 모듈성
제4장 메타언어적 추상화
4.1 메타순환적 평가기 4.1.1 평가기의 핵심부 4.1.2 구성요소의 표현 4.1.3 평가기의 자료 구조들 4.1.4 평가기의 실행 4.1.5 프로그램으로서의 데이터 4.1.6 내부 선언들 4.1.7 구문 분석과 실행의 분리 4.2 느긋한 평가 4.2.1 정상 순서와 적용적 순서 4.2.2 느긋한 평가를 이용하는 해석기 4.2.3 느긋한 목록으로서의 스트림 4.3 비결정론적 컴퓨팅 4.3.1 검색과 amb 4.3.2 비결정론적 프로그램의 예 몇 가지 4.3.3 amb 평가기의 구현 4.4 논리 프로그래밍 4.4.1 연역적 정보 검색 4.4.2 질의 시스템의 작동 방식 4.4.3 논리 프로그래밍과 수리논리학의 관계 4.4.4 질의 시스템의 구현
제5장 레지스터 기계를 이용한 계산
5.1 레지스터 기계의 설계 5.1.1 레지스터 기계의 서술을 위한 언어 5.1.2 기계 설계의 추상들 5.1.3 서브루틴 5.1.4 스택을 이용한 재귀 구현 5.1.5 명령 요약 5.2 레지스터 기계 시뮬레이터 5.2.1 기계 모형 5.2.2 어셈블러 5.2.3 명령과 명령 실행 함수 5.2.4 기계 성능의 감시와 측정 5.3 저장소 할당과 쓰레기 수거 5.3.1 벡터 구조로 표현된 메모리 5.3.2 무한 메모리라는 환상의 유지 5.4 명시적 제어 평가기 5.4.1 디스패처와 기본 평가 서브루틴 5.4.2 함수 적용의 평가 5.4.3 블록, 배정, 선언 5.4.4 평가기의 실행 5.5 컴파일 5.5.1 컴파일러의 구조 5.5.2 구성요소들 컴파일 5.5.3 함수 적용과 반환문의 컴파일 5.5.4 명령렬들의 조합 5.5.5 컴파일된 코드의 예 5.5.6 어휘순 주소 접근 5.5.7 컴파일된 코드와 평가기의 연동
Video Lectures (1986)
[2023-10-03 Tue 12:03] https://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/
총 20 강이다. 엄청난 내용.
- nebhrajani-a/sicp: Racket implementation and notes for SICP's video lectures.
https://github.com/nebhrajani-a/sicp
Lecture Notes
Lecture Notes | Structure and Interpretation of Computer Programs | E-
Lecture Notes
This section contains the online lectures for the course, which are expected to be read by students in preparation for recitation sessions. Each lecture contains a set of exercises which students must complete by a given date. Please see the calendar for more information on the dates the exercises are due.
이 섹션에는 암송 세션을 준비하기 위해 학생이 읽어야 하는 코스에 대한 온라인 강의가 포함되어 있습니다. 각 강의에는 학생이 지정된 날짜까지 완료해야 하는 연습 문제가 포함되어 있습니다. 연습 문제 마감일에 대한 자세한 내용은 달력을 참조하세요.
Lec # Topics
- L1 Introduction to Computation (PDF - 2.1 MB)
- L2 Scheme Basics (PDF - 1.5 MB) A Story about using Lisp in a Startup Company (PDF)
- L3 Procedures, Processes, and Recursion (PDF - 2.1 MB)
- L4 Orders of Growth and Kinds of Procedures (PDF - 1.7 MB)
- L5 Data Abstraction (PDF - 2.1 MB)
- L6 Higher Order Procedures (PDF - 2.1 MB)
- L7 Good Programming Practices (PDF - 1.6 MB)
- L8 Using Higher Order Procedures (PDF - 1.6 MB)
- L9 Symbols and Quotation (PDF - 1.4 MB)
- L10 Tagged Data (PDF - 2.2 MB)
- L11 Advanced Data Types (PDF - 2.2 MB)
- L12 Data Mutation (PDF - 1.7 MB)
- L13 Trees, Graphs and Search (PDF - 2.2 MB)
- L14 Graphs and Search
- L15 Environment Model (PDF 1 of 2 - 1.6 MB) (PDF 2 of 2 - 2.2 MB)
- L16 Object Oriented Programming I (PDF - 2.3 MB)
- L17 Object Oriented Programming II (PDF - 1.7 MB)
- L18 Object Oriented Programming III (PDF - 2.0 MB)
- L19 Interpretation, Interpreter Code (PDF)
- L20 The Meta-circular Evaluator (PDF - 2.6 MB), Evaluator Code (PDF)
- L21 Lazy Evaluation (PDF 1 of 2 - 2.0 MB) (PDF 2 of 2 - 1.2 MB), Lazy Evaluator Code (PDF)
- L22 Asynchronous Computing (PDF - 1.2 MB)
- L23 Universal Machines (PDF)
- L24 Geometric Folding Algorithms: Origami, Linkages, and Polyhedra
- L25 Peer-To-Peer Computing Research: A Fad?
- L26 Computability (PDF)
SICP BOOK
[2023-10-24 Tue 15:45] http://sarabander.github.io/sicp/html/index.xhtml
CANCELLED SICP Clojure
[2023-10-24 Tue 12:05]
https://github.com/junghan0611/sicp
SICP Clojure and Racket with Courses
[2023-10-03 Tue 12:11]
- SICP Lecture (RU)
- https://ru.hexlet.io/courses/sicp
- Racket 코드 베이스
검색해보니 전략을 가지고 꾸준히 해 나아가야만 된다. 급한 일들과 별개로 그저 꾸준히 해 나아가는 프로젝트와 같다.
다행히 번역기가 있어서 두려울 것은 없다. 어떻게 학습해야 하는가? 전략을 탐구해야 한다.
근데 당장 급한 것은 오히려 Clojure 파트이다. 다시 돌아가자.
DEPRECATED Racket SICP 플러그인 설치
[2023-10-03 Tue 12:20] 패키지 매니저에서 설치. 쓸모가 있는지 모르겠다.
이광근 류광 번역 비교
문제 풀이 유튜브 영상 리스트
- 1 장
Structure and Interpretation of Computer Programs - Chapter 1.1 - you-
Related-Notes
References
해럴드 에이블슨, 제럴드 제이 서스먼, 마틴 헨즈, 토비아스 브릭스타드, and 줄리 서스먼. 2022. 자바스크립트로 배우는 SICP : 컴퓨터 프로그램의 구조와 해석. Translated by 류광. https://www.yes24.com/Product/Goods/116469364.
해럴드 애빌슨, 제럴드 제이 서스먼, and 줄리 서스먼. 2016. SICP 컴퓨터 프로그램의 구조와 해석. Translated by 이광근. https://www.yes24.com/Product/Goods/23951885.
“#Racket #Sicp Structure and Interpretation of Computer Programs 1986 Video Notes.” n.d. Accessed November 12, 2024. https://nebhrajani-a.org/sicp/video_notes/#orga5f90cf.