2009-10-26 2 views
9

나는 SICP에서 상당히 많은 스킴을 배웠지 만 지금은 일반적인 리스프에 더 관심이 많다. 나는 일반적인 혀짤음의 foldreduce이고, 왼쪽 또는 오른쪽 접기에 특별한 인수가 있다는 것을 알고 있지만, unfold은 무엇인가? 인터넷 검색은별로 도움이되지 못했습니다. 실제로 나는 전개가 없다는 인상을받습니다 ???일반 리스프에 대해 "unfold"하시겠습니까?

답변

13

커먼 리스프는 (loop ... collect ...)입니다. 그 등가가 unfold을 사용하여

 
(loop for x from 1 to 10 collect (* x x)) 

비교 :

 
(unfold (lambda (x) (> x 10)) 
    (lambda (x) (* x x)) 
    (lambda (x) (+ x 1)) 
    1) 

일반적으로 (unfold p f g seed)는 기본적으로

 
(loop for x = seed then (g x) until (p x) collect (f x)) 

편집이다 : 오타

+2

흠, 흥미 롭군요. 나는 지난 1 시간 동안 루프를 가지고 놀았습니다 : P 그 위대한 것들! 프로그래밍 언어에 형식 문자열과 같이 이해할 수있는 고유 한 구문과 규칙 집합이있는 이러한 종류의 포함 된 하위 언어가있는 것이 좋습니다. 루프는 강력한 것입니다! – nullpointer

+2

어둠의 세계에 오신 것을 환영합니다. – huaiyuan

3

일반적인 lisp 하이퍼pec은 unfold 함수를 정의하지 않지만 직접 작성할 수는 있습니다. 그것의 체계 정의는 상징을위한 거의 상징을 번역한다.

+3

감사를 해결. 그건 불행한 일이지만, 나는 내 자신의 글을 쓸거야. 나는 정말 순수하고 그처럼 아름다운 기능적 선량을 가진 계획을 좋아하지만, 나는 엉성하면서도 표현력이 풍부한 공통 리스프를 배웠다. 에스페란토가 아닌 영어를 배우는 것과 같습니다. – nullpointer

관련 문제