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值和事实:

3x2+2

底层入口也计算同一对象:

3x2+2

核心math-differentiate不解析字符串,也不依赖Formula模块;它只消费数学值。这让文本文法可以独立演进,而计算保持稳定的输入契约。