2011-11-02 4 views
1

함수를 출력하는 프로 시저를 어떻게 작성합니까? (라켓)함수를 출력하는 프로 시저를 어떻게 작성합니까? (라켓)

프로 시저가 람다를 출력합니까?

(define answer 
    (lambda (question) 
    (lambda (answer) 
     `((question: ,question) 
     (answer: ,answer))))) 

다음 시도 :

+2

글쎄, "Scheme의 함수는 무엇입니까?" 이것은 "절차"와 어떻게 다른가? 아니면 오히려 "절차가 무엇입니까?" 그 질문에 대답하는 것은 ... 대답의 98 %입니다 :) –

답변

2

내가 너무 spoily없는거야 희망 REPL에서

> ((answer 'thequestion) 'withananswer)

.

(define (output-function) 
    (define (f x) 
    x) 
    f) 

을 그리고 당신은 이런 식으로 테스트 할 수 있습니다 :

2

또 다른 방법은 동일한 작업을 수행하는

(define test (output-function)) 
(test 10) ; returns 10 
2

이런 식으로 생각해. 우리는 또한 출력을 미리 정의 할 수

(define (output-num x) 7) 

: 그것은 출력 기능의 숫자 쉽게

(define num 7) 
(define (output-num x) num) 

지금은 어떻게 출력 기능을 쉽게 알 - 단지 몸에 참조 .

(define (a-function x) "hello") 
(define (output-function y) a-function) 

그리고, 단지 문자 숫자처럼, 우리는 lambda를 사용하여 정의의 몸으로 우리 함수를 작성할 수 있습니다

(define (output-function y) (lambda (x) "hello")) 
4

당신은 의미합니까 : 어떻게에서 고차 함수를 사용합니까 다른 기능을하기 위해서? 이 그렇다면, 이것 좀보세요 :

(lambda (f) (lambda (x) (f x))) 

을 어떤이가하는 것은 :

1 : 범위 내에서 : 매개 변수

2와 "F"로 초기화 익명의 폐쇄를 만들 제 체로, 파라미터

3으로서 "x"를 갖는 폐쇄 생성 : ((X)의 상부에 고정되는 F) X f를 적용

이것이 의미하는 것은 (전 (FX)가 있다는 에바 luated), f는 x를 인수로 갖는 함수로 선언됩니다. x에 f를 적용하는 것은이 전체 표현식이 반환하는 것입니다.이 경우 클로저를 제외하고는 값을 할당하지 않았으므로 아무 것도 없습니다.

이것을 시작점으로 사용하면 클로저가 다른 클로저를 반환 할 때 어떤 일이 발생하는지 고려하십시오. 아웃터 클로저가 해당 값을 본문에 전달한 후에 내부 클로저가 평가됩니다. 지연된 평가라고하며 내부 프로 시저를 나중에 확장 할 수 있도록 프로 시저를 값으로 전달할 수 있습니다.

다음은 얼마나 유익한 지에 대한 구체적인 예입니다.(

(define (cons kar kdr) (lambda (kons) (kons kar kdr))) 
(define (car kons) (kons (lambda (kar kdr) kar))) 
(define (cdr kons) (kons (lambda (kar kdr) kdr))) 

이를 이해하기 위해, 주변의 정의를 통과하지만 기억 (정의 (foo는 막대) ...) 수단 (foo는 정의의 만 higher-order 함수 (폐쇄)를 사용하여 단점, 자동차 및 CDR을 정의 할 수 lambda (bar) ...)) ...

관련 문제