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

What is an "up" or "down" structure in Scheme?

泛函微分几何 的早期,Sussman & Wisdom 就开始使用 "up structure"...但我一点也不知道这可能是什么。

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

我在文本中的任何地方都找不到这个结构的描述,我在标准版本的 Scheme 或语言文档中也找不到它...所以我想知道这些 "up structure" 和"down structure" 事情是。我知道它们对应于基本微积分中的导数和积分。只是完全不知道它们是如何放在 Scheme 中的。

参见第 22 页的脚注 1:

In multiple dimensions the derivative Df(x) is a down tuple structure of the partial derivatives and the increment ∆x is an up tuple structure, so the indicated product is to be interpreted as a contraction. (See equation B.8.)

在文本中扫描 up 的外观,它似乎是一个包含实际值的两位元组。在 Scheme 中,两位元组可以是一个简单的 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 rather than cons and we would protect the struct with a contract:

#lang racket

(struct up (x y))

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

免责声明

我扫描这本书的印象是 up 结构包含两个 Real 数值,但我并不声称完全理解数学。因此可能需要指定更复杂的数据类型或更广泛的验证。当然,对于某些类型的程序来说,没有类型验证的原始动态类型 conslist 也是一种选择。

来自scmutils reference manual:1

We identify the Scheme vector data type with mathematical n-dimensional vectors. These are interpreted as up tuples when a distinction between up tuples and down tuples is made. We inherit from Scheme the constructors VECTOR and MAKE-VECTOR, the selectors VECTOR-LENGTH and VECTOR-REF, and zero-based indexing.

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


1(转到 Up Tuples 和 Down Tuples 部分并向下滚动到乘法解释,以了解它的全部内容) .