Что такое структура "вверх" или "вниз" в схеме?
В самом начале функционально-дифференциальной геометрии Суссман и Мудрость начинают использовать "структуру вверх"... но я понятия не имею, что это может быть.
(print-expression
((compose P2-chi R2-chi-inverse)
(up ’x0 ’y0)))
Я не могу найти описание этой структуры нигде в тексте, и я не могу найти его в стандартной версии Scheme или в документации по языку... поэтому мне интересно, что именно эти вещи "вверх структура" и "структура вниз", Я понял, что они соответствуют производной и интегралу в базовом исчислении. Просто не представляю, как они составлены в схеме.
2 ответа
От scmutils
Справочное руководство:1
Мы отождествляем векторный тип данных Scheme с математическими n-мерными векторами. Они интерпретируются как кортежи вверх, когда проводится различие между кортежами вверх и вниз. Мы унаследовали от Scheme конструкторы VECTOR и MAKE-VECTOR, селекторы VECTOR-LENGTH и VECTOR-REF и индексацию на основе нуля.
И, я думаю, математическая интерпретация такова: ковариантность и контравариантность векторов.
1 (перейдите в разделы "Кортежи вверх" и "Кортежи вниз " и прокрутите вниз до объяснения умножения, чтобы увидеть, что это такое).
См. Сноску 1 на странице 22:
В нескольких измерениях производная Df(x) является структурой частичных производных с понижением, а инкремент ∆x является структурой с восходящими кортежами, поэтому указанный продукт следует интерпретировать как сокращение. (См. Уравнение B.8.)
Сканирование по тексту на предмет появления up
, кажется, это двухместный кортеж, содержащий реальные значения. В Схеме двухпозиционный кортеж может быть простой пунктирной парой с использованием 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
в Студенческих Языках Ракетки. С другой стороны, в #lang racket
мы бы наверное использовали struct
скорее, чемcons
и мы будем защищать struct
с контрактом:
#lang racket
(struct up (x y))
(provide (contract-out
(struct up ((x real?)
(y real?)))))
отказ
У меня сложилось впечатление от сканирования книги, что up
структура содержит два значения действительных чисел, но я не претендую на полное понимание математики. Поэтому может потребоваться указание более сложного типа данных или более тщательной проверки. Конечно, сырой динамически набранный cons
или же list
без проверки типа также вариант для определенных типов программ.