프로그래밍 언어 개발에 관심 있는 사람들의 모임입니다.
|
2008-07-25 13:40:14
|
http://pjb7687.dnip.net/rosetta/ … 공개하빈다(…) 요새 django배우고 있는 터라 연습삼아 딴거 안 쓰고 첨부터 끝까지 다 만들어봤네요. 아직 수정기능이 없는데 추후 추가예정입니다 기타 잔버그 목록: 같은 글에 같은 언어로 두번 이상 글을 쓰면 하나밖에 안 보임(기존 알고리즘 위에 덮어씌우도록 처리해야 할지, 아니면 같은 언어로 글쓰기를 허용해야 할지 고민 중) 같은 언어를 두번등록하면 전체적으로 이상동작함. (근데 삭제기능조차 없스빈다) |
트랙백 주소: http://langdev.net/post/trackback/115
← 지도편달 부탁드립니다. :) | lazy vs applicative order evaluation! 어느쪽을 선호하시나요? →
오오! 그리고 HTML 표준도 지켜주셨으면 좋겠어요. 소스를 Google Code 등에다 저장소를 호스팅 받아 공개해주시면 좋을 것 같습니다. 아니면 IRC로 요청하시면 직접 repos.langdev.net/rosetta 정도의 주소로 저장소를 제공해드릴 수도!
헉… Python의 lambda가 재귀까지 될 줄이야… 이건 뭐…. 킹왕짱?
이름에 매이지 않고 재귀하는 방법도 있습니다.
함수형 언어 같은 곳에서는lambda calculus 같은 경우에는 흔한 방법이죠.(원래는 두 개의 lambda만 필요하지만 불필요한 인자를 노출시키지 않기 위해 wrapper를 하나 더 뒀습니다)
헉~~~!!! 이게 흔한 방법이라고요?… 역시 전 함수형 언어의 철학이 이해가 안 가는군요… -_-…
괜히 Guido가 lambda를 좋아하지 않는다고 한게 아니군요.
아직 위의 code를 어떻게 이해해야할지 모르겠습니다… 공부하면 답이 나오긴 하겠지요.
그렇다고 설명하지는 말아주세요. ^_^ 현재로서는 알고 싶지 않습니다. 머리만 복잡해지겠군요.
글쎄, 위의 code를 뭐라고 해야 할까요?. 객체지향의 refactoring 관점에서 저는 악취를 느낍니다. 객체지향에서 비슷한 걸로 message 연쇄가 있죠.
음 흔하다고 말한 게 좀 실수긴 한데; 꼭 필요한 건 아닙니다. 다만 외부 scope에 전혀 의존하지 않는 함수를 만들어야 한다면 이렇게 하는 게 맞고요. lambda calculus나 그런 것들을 하다 보면 자주 등장하는 건 맞는데 함수형 언어들이 여기에 많이 의존하기 때문에 흔하다는 말을 해 버렸네요.
저 코드의 해석은 세 개의 lambda를 다른 줄에 늘어 놓고 잘 생각해 보시면 됩니다.
음… 솔직히 이해가 안 갑니다. 외부 scope에 의존하지 않는다니… 제가 생각하기에 위 code의 핵심이라고 생각되는 f는 f = (lambda i, f: f(i-1, f) + ~~~) 다른 scope에서 두번 나온다고 봅니다.
즉 괄호에 의해 scope가 나뉘는 거 아닌가요?
Python에서 전역 scope 이름 검색이 느리다고 알고 있는데 그것을 대비한 방법이 아니라면 어떤 형태로 의미가 있는 것인지 알 수 없군요.
예, lambda calculus 공부할께요… T_T.
외부 scope라고 한 뜻은 fib이라는 이름을 전혀 쓰지 않는다는 뜻이었습니다. 물론 함수 인자로 scope가 만들어진다는 지적은 맞습니다 :)
코드를 제대로 이해하셨다면 맨 안쪽 함수가 핵심이며, 그 함수는 자기 자신을 인자로 다시 받는다는 걸 알 수 있습니다. (둘째 함수의 역할이 그 자기 자신을 인자로 주는 과정을 구현하기 위함입니다.) 이런 형태는 lambda calculus의 fixed-point combinator랑 연관이 있습니다. 일 해야 해서 설명은 위키백과를 보시길;