R6RS では Appendix D として、数値解析の4次 Runge-Kutta 法が実装されています。
この例は R5RS のときからお馴染みのものです。標準ライブラリを含まない言語のコアだけで
ということを簡潔なコードで示す楽しいものです。R5RS のときには deley
と force
を使っていましたが、これがなくても済むことも分かります。
この例に似たテーマのプレゼンテーションが LispNYC.org での "10 Nov 2009 - Simple Scheme for Tricky Differentials" で紹介されています。これもやはり常微分方程式を高階関数で表し、遅延で解いています。
確認してみたところ、splines.ss 中の
(define (diff xs) (map * xs (countFromTo 1 (length xs))))
(define (diff xs) (map * (cdr xs) (countFromTo 1 (- (length xs) 1))))