UPDATE: I've fixed up the code for representations of lie groups. It's a lot cleaner, and mirrors the math more closely now. Latest version in the darcs repository.
; Copyright (C) 2006 Will M. Farr
; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License along ; with this program; if not, write to the Free Software Foundation, Inc., ; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. (module memoization mzscheme (provide memoize1 memoize) (define (memoize1 proc1) (let ((results (make-hash-table 'weak 'equal))) (lambda (x) (hash-table-get results x (lambda () (let ((result (proc1 x))) (hash-table-put! results x result) result)))))) (define (memoize proc) (let ((aux (memoize1 (lambda (x) (apply proc x))))) (lambda args (aux args)))))