5
Scheme에 자동 메모 작성자를 쓰는 중 몇 가지 문제가 있습니다.Scheme에 자동 메모 작성하기. 매크로 및 래퍼 도움말
해시 테이블을 만들고 값이 이미 계산되었는지 확인하는 작업 메모 기능이 있습니다. 그 전에 계산 된 경우 함수를 호출하는 다른 값을 반환합니다.
(define (memoize-wrapper function)
(set! function (memoizer function)))
을 그리고 희망 memoize - 래퍼로 함수를 정의 DEF-메모라는 매크로를 만들 :
(define (memoizer fun)
(let ((a-table (make-hash)))
(λ(n)
(define false-if-fail (λ() #f))
(let ((return-val (hash-ref a-table n false-if-fail)))
(if return-val
return-val
(begin
(hash-set! a-table n (fun n))
(hash-ref a-table n)))))))
지금 나는이 같은 memoize - 래퍼 함수를 만들려고합니다. 예. 매크로 (memoizer (에 확장처럼 함수 이름 인수 본체 ...) 또는 뭔가를 정의 할 수
을 그래서 내가 할 수있을 것을 :.의 memoized 버전을 만들어야합니다
(def-memo (factorial n)
(cond
((= n 1) 1)
(else (* n (factorial (- n 1))))))
대신 정상 느린 하나의 계승.
이
내 문제가
- memoize - 래퍼가 제대로 작동되지 않는 것입니다, 그것은 memoized 기능을하지만 원래의 함수를 호출 나던 .
- 매크로 내부에 정의를 작성하는 방법을 알지 못합니다. 변수 길이 인수 및 가변 길이 본문을 가져올 수 있는지 어떻게 확인합니까? 그런 다음 함수를 정의하고 메모 작성자와 함께 랩핑하려면 어떻게해야합니까?
고마워요.
WOW. 그것은 단지 굉장합니다. 간단히 매크로 비트에 대한 코드를 간단히 설명해 주시겠습니까? 왜 거기에 있습니다. ? 왜 당신은 제공 했습니까? 그리고 정말로 신청해야합니까? 나는 초보자입니다. 감사. – unj2
매개 변수 목록에서. 다음 변수가 둘 이상의 것에 바인딩되어 있음을 나타냅니다. 매크로에서 p는 단일 매개 변수가 아니라 매개 변수 목록입니다 (본문은 식 목록 임). 함수에서와 동일한 것은, 함수 f에 params의리스트 인 p를 적용하는 것이 필요합니다. –
이것도 참조하십시오 : http://planet.plt-scheme.org/display.ss?package=memoize.plt&owner=dherman –