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

时间:2015-01-14 23:15:30

标签: data-structures functional-programming scheme physics calculus

非常早期的功能微分几何,Sussman&智慧开始使用" up结构" ...但我对这可能是什么一无所知。

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

我在文本的任何地方找不到这个结构的描述,我在Scheme的标准版本或语言文档中找不到它......所以我想知道这些" up结构& #34; "羽绒结构"事情是。我得出它们对应于基本微积分中的导数和积分。只是想知道他们如何在Scheme中组合起来。

2 个答案:

答案 0 :(得分:2)

见第22页脚注1:

  

在多维中,导数Df(x)是一个向下元组结构   偏导数和增量Δx是一个向上元组   结构,所以指示的产品被解释为a   收缩。 (见方程B.8。)

通过文本扫描up的外观,它似乎是一个包含实际值的两位元组。在Scheme 2中,使用cons

,元组可以是一个简单的dotted pair
 (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)

一些方案将两个元组加入 - 例如在Racket的学生语言中posn。另一方面,在#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也是某些类型程序的选项。

答案 1 :(得分:2)

来自scmutils reference manual 1

  

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

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

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