example. Formula:用文本作为另一种入口[#73]
写短公式时,Formula DSL更方便。φ:read读出Semantic值;同一个文本也可以交给φ:simplify这样的便捷包装:
@(define parsed (φ:read "x^3 + 2*x"))
@(define formula-report
(φ:differentiate parsed "x" #:assumptions (φ:assumptions "coordinate(x)")))
@math[(math-report-result formula-report)] Formula reader负责把文本解析一次。φ:differentiate是Formula façade:它将输入和坐标读为Semantic值,再调用核心计算API。若要使用底层API,则明确传入Semantic值和事实:
底层入口也计算同一对象:
核心math-differentiate不解析字符串,也不依赖Formula模块;它只消费数学值。这让文本文法可以独立演进,而计算保持稳定的输入契约。