2009-10-15 2 views
3

을 작성하는 방법 I가 작업이 문제가 :리스프 : 고차 기능

높은 순서 절차가 고정 된 연산자로 용어를 결합하는 아이디어를 캡처 더욱 일반화 될 수 합계. 수학적 연산 연산자는이 아이디어의 구체적인 예이며 곱셈은 합계 연산자의 추가를 대체합니다. 아래에 시작된 절차 축적은이 아이디어를 포착하기위한 것입니다. combiner 매개 변수는 용어를 줄이기 위해 사용되는 연산자를 나타내며 기본 매개 변수는 결합 할 용어가 남아 있지 않은 경우 반환되는 값을 나타냅니다. 그것은이에 따라 동작하도록 축적의 정의를 완료

(합 정의 (누적 + 0))

을 우리가 이미 축적 과정을 구현 한 경우 예를 들어, 우리는 다음과 같이 합 절차를 정의 할 수 있습니다 기술. 이 맞다면 내가 아니다 실제로 호출 합 절차를 사용하는 방법을 축적 따라서 번호를 정리해 보면 아무 생각이 없다,

base 
    (combiner base (accumulate (combiner start stop) start next stop)) 

하지만 :

  (define accumulate 
      (lambda (combiner base) 
       (lambda (term start next stop) 
        (if (> start stop) 
         ... 
         ...)))) 

나는 마지막 두 줄로 삽입.

+1

'숙제'로 과제 질문에 태그를 추가하는 것을 잊지 마십시오. –

+0

@PaulMcMillan : 실제 태그가 아닙니다. 감사합니다. – rvighne

+0

나는 의견을 말한 시점에 하나였습니다. 분명히 정치는 5 년 동안 개입했습니다. –

답변

4

This은 낚시하는 법을 배우는 좋은 방법입니다. 물고기를주는 것보다 훨씬 더 .

그 때까지 문제를 해결하는 방법은 다음과 같습니다. 함수를 작성하면 (누적 + 0) 할 것입니다. 누적 함수를 사용하지 마십시오. 숙제에 묻는 것을하는 변칙을 써라. 다음으로, 무엇을 할 것인가 (* 1 축적) 할 함수를 작성하십시오. 유사점은 무엇이며, 두 기능의 차이점은 무엇입니까? 대부분의 경우, 이들은 + 및 * 연산자의 발생을 제외하고는 동일해야합니다.

다음으로 누적 함수는 이전에 작성한 두 함수와 매우 흡사하게 보이는 함수를 반환하는 것입니다. 자, 당신이 작성한 두 함수가 매우 비슷하다는 통찰력을 사용하여 함수에 적용하는 방법 (defun 누적 ...)을 반환하는 방법을 생각하십시오.