LangDev

프로그래밍 언어 개발에 관심 있는 사람들의 모임입니다.


코드 로제타석

2008-07-25 13:40:14

http://pjb7687.dnip.net/rosetta/

공개하빈다(…)

요새 django배우고 있는 터라 연습삼아 딴거 안 쓰고 첨부터 끝까지 다 만들어봤네요.

아직 수정기능이 없는데 추후 추가예정입니다

기타 잔버그 목록:

같은 글에 같은 언어로 두번 이상 글을 쓰면 하나밖에 안 보임(기존 알고리즘 위에 덮어씌우도록 처리해야 할지, 아니면 같은 언어로 글쓰기를 허용해야 할지 고민 중)

같은 언어를 두번등록하면 전체적으로 이상동작함. (근데 삭제기능조차 없스빈다)

트랙백 주소: http://langdev.net/post/trackback/115

  1. 홍민희 2008-07-25 14:05:59

    오오! 그리고 HTML 표준도 지켜주셨으면 좋겠어요. 소스를 Google Code 등에다 저장소를 호스팅 받아 공개해주시면 좋을 것 같습니다. 아니면 IRC로 요청하시면 직접 repos.langdev.net/rosetta 정도의 주소로 저장소를 제공해드릴 수도!

  2. 김우승 2008-07-25 14:11:30

    헉… Python의 lambda가 재귀까지 될 줄이야… 이건 뭐…. 킹왕짱?

  3. lifthrasiir 2008-07-25 14:26:45

    이름에 매이지 않고 재귀하는 방법도 있습니다. 함수형 언어 같은 곳에서는lambda calculus 같은 경우에는 흔한 방법이죠.

    fib = lambda i:(lambda i,f=(lambda i,f:f(i-1,f)+f(i-2,f) if i>2 else 1):f(i,f))(i)
    
    

    (원래는 두 개의 lambda만 필요하지만 불필요한 인자를 노출시키지 않기 위해 wrapper를 하나 더 뒀습니다)

  4. 김우승 2008-07-25 15:03:55

    헉~~~!!! 이게 흔한 방법이라고요?… 역시 전 함수형 언어의 철학이 이해가 안 가는군요… -_-…

    괜히 Guido가 lambda를 좋아하지 않는다고 한게 아니군요.

    아직 위의 code를 어떻게 이해해야할지 모르겠습니다… 공부하면 답이 나오긴 하겠지요.

    그렇다고 설명하지는 말아주세요. ^_^ 현재로서는 알고 싶지 않습니다. 머리만 복잡해지겠군요.

    글쎄, 위의 code를 뭐라고 해야 할까요?. 객체지향의 refactoring 관점에서 저는 악취를 느낍니다. 객체지향에서 비슷한 걸로 message 연쇄가 있죠.

  5. lifthrasiir 2008-07-25 15:12:44

    음 흔하다고 말한 게 좀 실수긴 한데; 꼭 필요한 건 아닙니다. 다만 외부 scope에 전혀 의존하지 않는 함수를 만들어야 한다면 이렇게 하는 게 맞고요. lambda calculus나 그런 것들을 하다 보면 자주 등장하는 건 맞는데 함수형 언어들이 여기에 많이 의존하기 때문에 흔하다는 말을 해 버렸네요.

    저 코드의 해석은 세 개의 lambda를 다른 줄에 늘어 놓고 잘 생각해 보시면 됩니다.

  6. 김우승 2008-07-25 15:35:33

    음… 솔직히 이해가 안 갑니다. 외부 scope에 의존하지 않는다니… 제가 생각하기에 위 code의 핵심이라고 생각되는 f는 f = (lambda i, f: f(i-1, f) + ~~~) 다른 scope에서 두번 나온다고 봅니다.

    즉 괄호에 의해 scope가 나뉘는 거 아닌가요?

    Python에서 전역 scope 이름 검색이 느리다고 알고 있는데 그것을 대비한 방법이 아니라면 어떤 형태로 의미가 있는 것인지 알 수 없군요.

    예, lambda calculus 공부할께요… T_T.

  7. lifthrasiir 2008-07-25 15:46:02

    외부 scope라고 한 뜻은 fib이라는 이름을 전혀 쓰지 않는다는 뜻이었습니다. 물론 함수 인자로 scope가 만들어진다는 지적은 맞습니다 :)

    코드를 제대로 이해하셨다면 맨 안쪽 함수가 핵심이며, 그 함수는 자기 자신을 인자로 다시 받는다는 걸 알 수 있습니다. (둘째 함수의 역할이 그 자기 자신을 인자로 주는 과정을 구현하기 위함입니다.) 이런 형태는 lambda calculus의 fixed-point combinator랑 연관이 있습니다. 일 해야 해서 설명은 위키백과를 보시길;

목록보기

← 지도편달 부탁드립니다. :) | lazy vs applicative order evaluation! 어느쪽을 선호하시나요? →