User Tools

Site Tools


sicp_b0_f8_ba_ce_c7_cf_b1_e2

Those who hate SICP think it doesn't deliver enough tips and tricks for the amount of time it takes to read. But if you're like me, you're not looking for one more trick, rather you're looking for a way of synthesizing what you already know, and building a rich framework onto which you can add new learning over a career. That's what SICP has done for me. I read a draft version of the book around 1982 and it changed the way I think about my profession. If you're a thoughtful computer scientist (or want to be one), it will change your life too. | –Peter Norvig From Amazon

올해 여름(2005년 여름)에 다시 한번 보자.

http://wiki.cs.uiuc.edu/MFA/DOWNLOAD/ArtAnnotation.pdf :) http://wiki.cs.uiuc.edu/MFA/DOWNLOAD/ArtOfTheInterpreter1.lisp

berkeley webcast 2003 spring

일정

Structure

  • Functional Programming 1 (V)
  • Functional Programming 2 (V)
  • cond 사용
  • member 사용
  • 페러다임

functional programming, oop, logical

||application  ||
|| high level language||
|| low level language||
|| machine language ||
|| architecture||
|| logic gates||
|| transistors||
|| solid state physics ||
|| quantum physics ||
  • Higher-order Procedures 1 (V) : function as data
  • Higher-order Procedures 2 (V) : function as data
  • Culture Day: Film on User Interface Design : 앨런케이 강연 비디오 틀어줌 (V)

앗 잠온다. -_-;;

  • Culture Day: Film on User Interface Design : 이어서 틀어줌
  • Recursion and Iteration (V)
  • Recursion and Iteration (V) 7/23

보통 recursion버전과 recusion의 개선버전인 iteration버전의 차이.

  • Programming Methodology (V) 머드라? 다시 볼 필요성이 있음.
  • .. (V) documantation , debugging
  • Programming Methodology (V)

뒷부분에 시각이 남아서 unix에 대해서 가르쳤는데, 멋지게 가르쳤다. :)

  • Data Abstraction, Sequences (V)
  • Data Abstraction, Sequences (V)
  • Hierarchical Data (V)

tree

  • Hierarchical Data (V)
  • Hierarchical Data (V)
  • Representing Abstract Data (V)

taged data , direct data programming(기본적인 추상화)

  • Representing Abstract Data (V)

message passing(사람이 말을 이해할때 어순이 중요하군)

  • Representing Abstract Data (V)

david a patterson 의 하드웨어 강연 (i/o, raid, libraay and digital data)

디지털로 데이터를 바꾸면서 손해를 보는건 머가 있을까? 책의 느낌(물건에 대한 감정), 저작권보호
* oop (V)
* oop (V)
* oop (V) 스몰토크 비디오. :) 이해가 쏘옥 들어오게 설명한다. 보통 계층성을 지시적(당연히 쓰는거라고)으로 알려주는데, 문제제시하고 해결방안으로 계층성을 이야기한다. 각 oop의 중요요소들을 긴밀하게 연결해준다. :) 어째 요즘 설명보다 70년대 설명이 더 좋은거 같다. ( 뒷부분 다시 볼 필요성이 있다.)
* Assignment, State, Environments (V) 중간에 잘 이해안가는 부분이 있음(다시 봐야겟다.)
* Assignment, State, Environments (V)
* Assignment, State, Environments (V)
* mutable (V)
* mutable (V) 
* mutable (V)
* Networks, Client/Server (V)
* Networks, Client/Server (V) -대강 봄
* Culture Day : Wireless security
* Metacircular Evaluator (?) 봤던가? 
* Metacircular Evaluator (V)
* Metacircular Evaluator (V)
* Concurrency (V) 
* Concurrency (V)
* Concurrency (V)
* Streams (V)
* Streams (V)
* Streams (V)
* Logic Programming (V)
* Logic Programming (V)
* Logic Programming (V)
* Review (V) 대강 봄

—- Interpretation

  • Metacircular Evaluator (V) ; Interpretation 부분이 시작 되었다. scheme interpretor를 간단하게 구현했다. lecture 4.1 micro.scm , mceval.scm
  • Metacircular Evaluator (V) ; LOGO에 대해 이야기 한다. 왜 LOGO가 애들에게 다가가기 쉬운가?(dynamic scope) logo 는 function과 variable 의 네임스페이스가 다르다.(스킴은 right bubble에 의존하는데 반해..)

scheme repositort

http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/scheme/ http://www.faqs.org/faqs/scheme-faq/part1/ http://swissnet.ai.mit.edu/~jaffer/Scheme.html


scheme 참 간단하다. (define ? ?) 으로 변수 할당, 함수 까지 다 맹글어 버린다. 추상화라.. 추상화는 CS 뿐만 아니라, 모든 과학의 메인 아이디어 이다. 우와..SICP 강좌는 어떤 테크닉(or check list)을 알려준다기 보다도, 어떤 원리를 알려준다. sicp 를 보고 생각하는 방식이 변하지 않는다면 sicp를 잘 못 본것 이라고 한다. SICP 수업을 들으면 들을 수록 CS에 메인 기초적 아이디어와, 원리를 이야기 해준다. 직접 멀 지칭하지는 않지만, 생각의 바탕을 깔아주는듯..

HTDP 구체적 개념소개는 많이 안하지만, 각각의 기본적인 원리를 이야기 하면서 푼다. oop나 function 이나 따로 소개는 하기보다, 데이타 추상화, 숨기기 부분에서 자연스럽게 접근하게 한다.

emacs

;; .emacs
;; STK Scheme

(setq scheme-program-name "stk-cs61a")
(show-paren-mode 1)
(global-font-lock-mode t)
(add-hook 'text-mode-hook
    '(lambda () (auto-fill-mode 1)))
(add-hook 'inferior-scheme-mode-hook (lambda () (split-window)))

meta+s : run-scheme ctrl+c+z : switch-*scheme* ctrl+c+l : load scheme-file to *scheme* ctrl+c+e : evaluate scheme expression Ctrl+l : will move the display so that the line containing the cursor is centered vertically. Meta+/ : auto completion

==== lambda 에 관한 약간의 설명 ==== 동아대학교에 계시는 김재우님으로부터 아주 상세하고 좋은 답변을 얻었습니다. 조교님들보다 더 빨리 답변이 오네요 -_-; 물론 김재우님이야 원래 열성적인 분이시고 우리 학교 대학원생들께서 다른 곳과는 비교가 안 될 정도로 바쁘시다는 것은 잘 알고 있지만 외부인으로부터 답변을 이렇게 먼저 받아보게 되니 기분이 묘합니다. 이분한테 제일 질문을 나중에 보냈는데 말이죠. 이분도 그곳에서 강의를 10 개 가까이 조교를 맡고 계신 매우 바쁘신 분으로 알고 있습니다. 하여간 조교님들께서 과목을 이왕 맡으셨으니 서로 배우는 것이 있도록 좀더 저희에게 관심을 가져 주셨으면 더 바랄 것이 없겠습니다. 저 이런 말 했다고 조교님들 미워하지 마세요 ~~~ ^_^; > Drscheme 을 이용하여 scheme 을 배우고 있습니다. 쉽게 만든 환경이지만 굉장히 덩치가 크죠? :) 여기는 실습 환경이 좋지 않아 MzScheme으로 겨우 돌리던가 했답니다. > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > (define new-withdraw > (let ((balance 100)) > (lambda (amount) > (if (>= balance amount) > (begin (set! balance (- balance amount)) > balance) > "Insufficient funds")))) > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SICP 3장에 나오는 예제 구만요. mutation을 소개하면서 history-sensitive computation을 표현하는 여러가지 기법을 소개한 좋은 내용입니다. 각설하고, 일단 위의 식을 \(람다)식으로 변환해 볼까요? new-withdraw = (\amount -> if ... ){ balance => 100 } > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > (define (other-withdraw amount) > (let ((balance 100)) > (if (>= balance amount) > (begin (set! balance (- balance amount)) > balance) > "Insufficient funds"))) > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 근데 요식은 : other-withdraw = \amount ->( if .... { balance => 100}) 이제 그 정체가 보이지요? {}는 현재 식이 계산될 때 참조될 환경을 약식으로 표시한 것입니다. 둘다 balance란 이름이 수 100으로 바인딩 되어 있지만 위치는 확실히 다르지요? 그러므로 new-draw가 받아들이는 amount는 이미 balance가 100으로 바인딩 환경하에서 받아들이는 것으로 (new-withdraw 10) = ((\amount -> if ...){ balance => 100}){amount => 10) = if ... { balance => 100} = {balance => 90} 그러므로 이는 new-draw 가 내장하는 환경 balance의 값을 변경하게 되지만... 그러나, other-draw는 amount를 받아들이면서 (if .. { })를 계산하게 되고 이때 {}환경도 매번 새로 생성되는 거예요. 그러니까 balance는 매번 새로 생성되어 100 으로 초기화 되고 사라지는 것이지요. 이해 하셨으리라고 생각됩니다. > local variable 에 관련된 것이 나오기까지는 그냥 람다가 > 별거 아니라고 생각했는데 ... > 단지 (define (identifier <param>) <body>) 로 표시할 > 수 있는 프로시저를 공연히 골치아프게 써 놓은 귀찮은 것인 > 줄로만 생각했는데 ... 이거 무지 골치아프기 시작합니다. (define ...) Special form과 lambda는 완전히 다른 기능입니다. 주의!!! (define ...) 한다음 인터프리터에는 값이 출력되질 않지요? 그건 단지 (name, value) pair로 구성된 환경(environment)을 조작하는 언어의 특수한 기능이기 때문이며 Lambda는 on-the-fly에 대수학적으로 연산이 가능한 값으로서의 함수를 표현하는 문법입니다. 그렇지 않습니다. 곧 모든 프로그래밍 언어가 람다로 보이기 시작하는 불상사가 시작될 겁니다. 머지 않았습니다. :) > 위에서 왜 저렇게 다른 결과가 나오는지 람다가 무슨 의미인지 > 좀 알려 주세요. \ 를 Haskell식으로 간단히 \로 표시하도록 합시다. \ calculus는 Alonzo Church, Haskell CUrry등의 logician들에 의해 고안, 발전된 함수를 대수학적으로 다루기 위한 시스템입니다. 이론은 매우 간단한 시스템이에요. 문법은 두가지 밖에 없죠. 함수를 기술하는 식 (\ abstraction) e.g. \xy.x+y 함수를 적용하는 식 (\ application) e.g. (\xy.x+y) (5, 6) 그리고 위의 식들 간의 동치관계를 정의하여 Normal form을 정의할 수 있는 변환 시스템이 그 의미론을 정의합니다. alpha-equivalence (renaming) e.g) (\x.((\y.\x.x+y) x) 요걸 (beta-) reduction하면 (\x.(\x.x + x)) { y => x} 여기서 안의 x와 밖의 x가 충돌하니까... name crash가 발생 (\x.(\x'.x' + x)) { y => x } ( renaming!) 요래야 맞지요. beta-equivalence (reduction) e.g) (\x y. x + y) (5,6) => 5 + 6 => 11 eta-equivalence (functional extensionality) e.g) (\x.(\x.x+ 5) x) => (\x.x+5) 이미 AOE나 NOE(or NOR)방식의 substitution model은 1장에서 습득했겠군요? 바로 beta-reduction의 evaluation-order를 말하는 것이고, 언어를 전공하게 되거나 관심을 깊이 두게 되면 곧 알게 될 내용입니다. 설명은 서적을 참조하시면 더 잘 되어 있으니 간단한 소개에 마치기로 하고 본래의 formal system은 훨씬 정교해야 하겠죠? > P.S. SICP는 저희 대학 1학년 학생들에게 가르쳐온지 벌써 5여년이 되어가는 그야말로 이분야의 결정판입니다. SICP와 IFP(Introduction to Functional Programming)을 보지 않고서 함수형 프로그래밍을 공부하고 있다고 하기는 어렵겠죠? 아마 함수형 언어를 강조하시는 교수님 이시고 지금 다니시는 대가 명문 카이스트니 분명히 이광근 교수님이 시스템 프로그래밍을 하시는 구만요. 그분은 저같은 소졸의 이름을 아시지 못할 테지만 저는 잘 안답니다. 학회대도 먼 발치에서 두어번 뵈었지요. 잘 배웁십시오. 그분은 SML을 무척 좋아하시는 것 같더군요. 전 Haskell을 무척이나 좋아합니다. 열심히 하세요. 출처 - http://noah.kaist.ac.kr | –loop


'church number'

재밌는 예제!

(define zero (lambda (f) (lambda (x) x))) (define (1+ n) (lambda (f) (lambda (x) (f ((n f) x))))) (define one (1+ zero)) (define two (1+ one)) | f(x) = x*x 를 나타내면 (define (f x) (* x x)) | f(f(10)) 를 나타내면 ((two f) 10) | f(f(10)을 lambda 식으로 풀어 쓰면 (((lambda (f) (lambda (x) (f (f x)))) (lambda (x) (* x x))) 10) |

scheme 은 간단하다. 자료와 프로시져(함수)를 따로 구분하지 않고 둘다 어떤 것(오브젝트)으로 본다. 그 어떤 것을 define 이라는 돌도끼로 다듬어 쓸만한 것을 만든다.

sicp_b0_f8_ba_ce_c7_cf_b1_e2.txt · Last modified: 2018/07/18 14:10 by 127.0.0.1