저는 SICP 강의와 텍스트를 사용하여 Scheme에 대해 배우고 있습니다. 나는 "식 E의 적용은 식 (E E1, ... En)의 표현입니다. 이것은 식 (E)에 해당하는 n = 0의 경우를 포함합니다. Curried 응용 프로그램 E의 응용은 E의 응용이거나 E의 Curried 응용의 응용 "초급 : Scheme의 카 트리 함수
(편집 :. 내가 원래 정의를 잘못 인용했던 ... 위의 견적을 수정)
작업은
(define foo1
(lambda (x)
(* x x)))
에 대한 3로 평가 절차의 카레 응용 프로그램을 정의하는 것입니다
나는 정말로 여기에 대한 생각을 이해하지 못하고, Curriying에 대한 Wikipedia 항목을 읽는 것이 도움이되지 못했습니다.
누구에게 문의해야하는지에 대해 더 명쾌하게 설명 할 수 있습니까?
실제로 나에게이 문제에 대한 답을 주더라도 도움이 될 것입니다. ... 나는 단지 기본 아이디어를 얻지 못하고있다.
추가 : Brian Campbell의 긴 설명을 한 후에도 여전히 다소 분실 상태입니다.
(foo1 (sqrt 3)))
은 foo의 응용 프로그램으로 간주되므로 foo의 카레 응용 프로그램입니까? (I 가지 예상되는)
procedure application: expected procedure, given: 4 (no arguments)
이 What is Currying?을 다시 읽은 후 나는 또 다시 할 수 이해
도 간단한데,하지만 어쩌면 ... DrScheme에 (((foo1 2)) 2)
를 입력하면
다음과 같은 오류를 제공합니다 -define foo1은가되게합니다 : 그래서
(define (foo1 a)
(lambda (b)
(* a b)))
그때 입력 할 수 있습니다
((foo1 3) 4)
12
그러나 이것은 정말 출력으로 삼을 생산하는 가까이 저를하지 않으며,이 정말 원래 foo1은 무두질되지 않는 것처럼, 그냥있어 다시 정의를 보인다 그것.
젠장, 20 년 동안의 C 프로그래밍은 나를 위해 준비하지 못했습니다. :-) :-)
: 예처럼 :로
당신은 그 때 사용한다. 견적은 어디에서 끝나나요? – Svante
몇 가지 설명과 수정 사항에 대한 답변을 업데이트했습니다. Currying의 다른 정의에 대해 생각하지 않으려 고 노력하십시오. 이 연습에서는 Curried 함수를 정의하는 대신 Curried 함수를 적용하는 방법에 대해 설명합니다. –
수정 된 답변이 도움이되었는지 알려주세요. 당신이 이것을 배우려고하기 때문에, 나는 당신이 문제를 풀지 않고 그것을 해결할 수있는 충분한 정보를 당신에게 제공하려고 노력하고 있습니다. 당신이 내 설명을 전혀 확장하지 않기를 원한다면, 나는 분명히 기꺼이 할 것입니다. –