2011-01-14 3 views
5

고정 소수점 결합자가 무엇인지를 배우기 위해, 나는 내 자신을 썼다.Y 조합을 사용하여 체계에있는 결합 자

(define combine (lambda (functional) 
        (functional (lambda args (apply (combine functional) args)))) 

내가 계승과 피보나치에 대한 함수 (Functionals)로이 테스트 한, 작동하는 것 같다 :하지만 그 대신 Wikipedia's example처럼 엄격하게 익명 함수를 작성하는, 바로 사용 나는 정의합니다. 이것이 고정 소수점 결합 자의 공식 정의를 충족합니까?

+0

연습 2 :'define' 또는'letrec'을 사용하지 않고 Y 결합자를 사용하십시오 :) – leppie

답변

3

the blog referred to in the previous answer에 따르면, 심지어 콤비의 정의를 충족하지 않기 때문에 대답은 '결합'이후, '아니오'는 무료입니다 : 분명히 동일한 콤비는 중간 페이지 아래, here 나타납니다 변하기 쉬운.

+2

지적 해 주셔서 고맙습니다. 블로그 정의가 정확한지 확인하기 위해 Wikipedia의 정의와 같은 것으로 간주합니까? "결합 자 (combinator)는 기능 응용 프로그램과 이전에 정의 된 결합자를 사용하는 고차원 함수로 인수의 결과를 정의합니다." http://en.wikipedia.org/wiki/Combinatory_logic을 참조하십시오. – AlcubierreDrive

5

편집 : chessweb 또는 다른 사람이 그의 대답을 뒷받침하는 동안 일시적으로 그의 대답을 정확하고 틀린 것으로 간주하십시오.


대답은 '예'입니다.

(define Y 
    (lambda (f) 
     (f (lambda (x) ((Y f) x))))) 
+0

안됩니다. 자신 만의 질문에 답할 것을 권장합니다. IIRC는 당신이 그것을 준 후 2 일 안에 당신의 대답을 받아 들일 수 있습니다. –

+0

@ Yasir 좋아, 고마워! – AlcubierreDrive

+1

Y 결합자를 가르치는 주된 요점은 함수로 재귀를 구현할 수있는 방법을 확인하는 것입니다. 재귀 적 정의를 작성함으로써, 당신은 그렇게하지 못합니다 - 결국 당신은 작동하는 어떤 것으로 끝나지 만, Y가해야만하는 것을 이해하는데 유용합니다. Mike의 텍스트는 깊이있는 내용을 읽고'define'-less 버전이 어떻게 유도되는지 볼 수있는 좋은 곳이 될 것입니다. –