Схема потоков матриц

Я хотел бы иметь поток в схеме, который содержит несколько матриц, которые имеют определенный порядок.

Потоком этого потока будет матрица [1 6 0 3]; то есть строка 1 столбец 1 равен 1, строка 1 столбец 2 равен 6, строка 2 столбец 1 равен 0, а строка 2 столбец 2 равен 3. Технически каждая матрица является списком, но у меня есть представление (конструктор и селекторы) для матрица 2х2. Итак, это будет поток матриц 2х2.

Теперь следующий элемент в потоке должен быть [2 10 0 5]. Шаблон здесь таков, что матрицы в следующем потоке увеличиваются на следующее: [k (4k+2) 0 (2k+1)] где k - k-я матрица.

У меня есть идея, как я хочу хранить их. В качестве примера я знаю, что могу получить непрерывный поток с:

(define ones (cons-stream 1 ones))

и непрерывный поток целых чисел с:

(define integers (cons-stream 1 (add-streams ones integers)))

Итак, я хотел бы получить непрерывный поток матриц в формате, описанном выше. Таким образом, первая (автомобильный поток) будет матрицей, представленной [1 6 0 3], затем матрицей, представленной [2 10 0 5], а затем матрицей, представленной [3 14 0 7].

Итак, я знаю, что это будет что-то вроде:

(define start-matrix '(1 6 0 3))

(define init-stream (cons-stream start-matrix 
                             (add-streams ___________
                                          init-stream)))

Подчеркнуто то, что "я думаю" - недостающий кусок. Я удалил из этого поста процедуру добавления потоков, чтобы очистить свой пост.

*** РЕДАКТИРОВАТЬ: понял, я думаю, что моя "стартовая матрица" должна быть 1 6 0 3, а не 1 4 0 2.

Но должен быть способ добавить 1 4 0 2 к k-й матрице.

1 ответ

Решение

Хорошо, во-первых, вы понимаете, что вам нужно будет определить свою собственную версию add-streams для добавления матрицы? (Я понимаю, что это, возможно, было в том, что вы отредактировали).

Во-вторых, разве вы не видите, чего не хватает между примером SICP и вашей версией? В примере SICP есть функция, которая обеспечивает постоянный поток 1 с. 1 - это то, что добавляется к каждому новому элементу потока целых чисел. Теперь есть что-то, что вы хотите добавить к каждому новому члену потока init- stream. Конечно, вы можете решить, что это такое? Я имею в виду, если вы добавляете это когда-либо время и делаете это k раз... (вы упоминаете это много раз, вы должны знать, что это такое). Таким образом, все, что вам не хватает - это функция, которая доставляет бесконечный поток этой единственной вещи.

В-третьих, понимаете ли вы, почему в примере SICP добавляются новые элементы из потока 1, а не просто добавляется 1 каждый раз? (Там принцип демонстрируется).

В-четвертых, вы видите, что init-stream не подходит для этой функции? init-stream обозначает функцию общего назначения, тогда как вы определяете что-то, что возвращает очень специфический поток. Почему бы просто не следовать примерам имен SICP и назвать его для того, что он возвращает?

На мой третий и четвертый вопросы не нужно отвечать, чтобы вы решили свою проблему; Мне просто интересно узнать, если вы поняли суть.

Другие вопросы по тегам