Схема потоков матриц
Я хотел бы иметь поток в схеме, который содержит несколько матриц, которые имеют определенный порядок.
Потоком этого потока будет матрица [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 и назвать его для того, что он возвращает?
На мой третий и четвертый вопросы не нужно отвечать, чтобы вы решили свою проблему; Мне просто интересно узнать, если вы поняли суть.