태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'ex3.51'에 해당되는 글 1건

  1. 2009.12.01 SICP 근황 (8)

SICP 근황

Tech 2009. 12. 1. 20:47
3장 연습문제를 풀다가, 스트림이라는 아이가 나왔다.

cons-stream, delay 등등을 "이렇게 동작해" 라면서 코드를 보여주는데, 얘네들이 보여주는 코드를 가지고 문제를 풀면 스트림이 스트림이 아니게 된다.

(stream-enuerate-interval 0 100000)

이런걸 만들면, 만드는 순간 모두 evaluation 되어 버리는 것. 그 이유는,


여기 각주에 있음. 요는 cons-stream, delay 가 Special form 이 아니라 Function 이면 방법당한다는 것. 천천히 코드를 따라가 보면 당연하다. 책에서 주는 정의대로 하면 스트림이 부지런해져서 만들어지는 순간 끝까지 다 생긴다규 ㅠㅠ

mit-scheme 에는 빌트인으로 cons-stream 이 있어서 이걸 써서 하면 제대로 동작한다. PLT-scheme 에서도 뭔가 할 수 있긴 한것 같은데, 그건 컴키드님이 찾아서 메일링 리스트에 공유해주실 듯.

아 짱나 =3=3

Add:
PLT-Scheme 에서,
  1. 언어를 "Module" 로
  2. 소스코드 맨 위에 "#lang planet neil/sicp" 를 한줄 넣는다
실행하면 뭔가 받아와서 설치함. ... SICP 연습문제들 돌릴 수 있음. ... 책에 정의된 cons-stream, delay 를 쓰고 있다면 지우자. 뒤쪽 infinite-stream 에서 방법(무한시간+공간)당한다.

'Tech' 카테고리의 다른 글

git/git-svn on working machine  (2) 2009.12.17
Links on xml and related techs  (1) 2009.12.09
SICP 근황  (8) 2009.12.01
django 삽질  (3) 2009.11.19
CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty)  (2) 2009.09.17
Parameter vs Argument  (3) 2009.01.21
Trackbacks 0 : Comments 8
  1. kkk 2009.12.06 21:39 Modify/Delete Reply

    글쎄요.. 제가 보니 delay, force는 plt-scheme에 있는것 같더군요.
    없어도 간단한 매크로를 이용하면 되지 않을까 싶네요.

    (define-syntax-rule (delay exp) (lambda () exp))
    (define-syntax-rule (force delayed-exp) (delayed-exp))
    (define-syntax-rule (cons-stream x y) (cons x (delay y))) 나머지는 요세개로...

    • Favicon of http://deisys.net dgoon 2009.12.06 23:11 Modify/Delete

      define-syntax-rule같은것도 있었군요! 근데 언어를 r5rs로 하면 모른다고 하고, pretty big 에서는 되는듯...

      언어를 R5RS로 놓고는, delay, force는 빌트인을 쓰고

      (define-syntax cons-stream
      (syntax-rules (x y)
      ((cons-stream <x> <y>)
      (cons <x> (delay <y>)))))

      이렇게 cons-stream 을 쓰면 되긴 됩니다. 책에 나온대로

      (define (cons-stream x y) (cons x (delay y))

      하면 방법당... 근데 위 define-syntax는 너무 번잡해서 패배라고 생각했는데 ... ㄷㄷㄷ

      스킴도 방언인 주제에, 뭐 이리 방언이 많나염. ㅠㅠ

  2. kkk 2009.12.07 20:45 Modify/Delete Reply

    근데 cons-stream을 정의하는 매크로에서 literal-id 가 필요한가요?

    (define-syntax cons-stream
    (syntax-rules ()
    ((cons-stream x y)
    (cons x (delay y)))))

    • Favicon of http://deisys.net dgoon 2009.12.07 21:06 Modify/Delete

      아.. 그렇군염. 저걸 어떻게든 해볼려고 막 찾아서 삽질하다가 문서 제대로 안읽고 example 몇개만 보고 따라하느라... ㅎㅎㅎ

      덕분에 http://docs.plt-scheme.org/reference/Macros.html 이 페이지를 찾았습니다. 위 방법 당하기 전까지 매크로 모르고 살아왔었다능... =_=

  3. 안윤호 2010.01.14 11:54 Modify/Delete Reply

    예전에 제가 ibm 디벨로퍼 웍스에 call by name 이라는 글을 올렸던 적이 있습니다.
    스트림은 여러가지 방법으로 구현 가능합니다.

    sicp 를 검색하다 우연히 들러 글 올려 놓고 갑니다.

    • Favicon of http://deisys.net dgoon 2010.01.14 12:28 Modify/Delete

      네, 안그래도 스트림 구현을 어떻게 해야 하는지 서핑을 해보고 있었습니다.

      http://www.ibm.com/developerworks/kr/library/s_issue/20081118/

      많은 도움이 되었습니다! ;-) 꾸벅~

  4. 안윤호 2010.01.14 13:02 Modify/Delete Reply

    예 요즘은 제 블로그에 the art of interpreter를 재구성하고 있답니다.
    가끔 들러주세요

    toyfab,tisory.com입니다. ^^

Write a comment