首页 文章

Scheme中的“up”或“down”结构是什么?

提问于
浏览
4

很早就在功能微分几何中,Sussman&Wisdom开始使用"up structure" ......但我对这可能是什么没有任何想法 .

(print-expression
  ((compose P2-chi R2-chi-inverse)
  (up ’x0 ’y0)))

我无法在文本的任何地方找到这个结构的描述,我无法在Scheme的标准版本或语言文档中找到它......所以我想知道这些“向上结构”和“向下结构”究竟是什么 . 我得出它们对应于基本微积分中的导数和积分 . 只是不知道如何将它们放在Scheme中 .

2 回答

  • 2

    来自 scmutils reference manual:1

    我们用数学n维向量识别Scheme向量数据类型 . 当区分上元组和下元组时,这些被解释为up元组 . 我们继承了Scheme的构造函数VECTOR和MAKE-VECTOR,选择器VECTOR-LENGTH和VECTOR-REF,以及从零开始的索引 .

    而且,我认为,数学解释是:Covariance and contravariance of vectors .


    1(转到Up Tuples和Down Tuples部分并向下滚动到乘法解释,看看它是什么) .

  • 2

    见第22页脚注1:

    在多维中,导数Df(x)是偏导数的下元组结构,增量Δx是上元组结构,因此指示的乘积将被解释为收缩 . (见方程B.8 . )

    扫描文本以查看 up 的外观,它似乎是一个包含实际值的两位元组 . 在Scheme 2中,元组可以是一个简单的dotted pair,使用 cons

    (define (up x y)
         (if (and (real? x)
                  (real? y))
           (cons x y)
           (error "up: argument is not a Real"))))
    
     (define up? cons?)
    
     (define up-x car)
    
     (define up-y cdr)
    

    一些方案烘焙了两个元组 - 例如 posn 在Racket的学生语言中 . 另一方面,在 #lang racket 中,我们可能会使用struct而不是 cons ,我们会protect the struct with a contract

    #lang racket
    
    (struct up (x y))
    
    (provide (contract-out
              (struct up ((x real?)
                          (y real?)))))
    

    免责声明

    我对扫描这本书的印象是 up 结构有两个实数值,但我并不认为完全理解数学 . 因此,可能需要指定更复杂的数据类型或进行更广泛的验证 . 当然,没有类型验证的原始动态类型 conslist 也是某些类型程序的选项 .

相关问题