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

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

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

Теперь следующим элементом в потоке должен быть [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-й матрице.


person Matt    schedule 15.10.2012    source источник
comment
Непонятно, в чем ваш вопрос. С какой частью из вышеперечисленного у вас возникли проблемы?   -  person itsbruce    schedule 15.10.2012
comment
Привет, Брюс. Спасибо, что прочитали это. Мне просто нужен поток матриц в описанном формате. То есть [1 6 0 3], затем [2 10 0 5], затем [3 14 0 7]. он постоянно создает поток матриц с этим шаблоном. Фактический шаблон таков: [k (4k+2) 0 (2k+1)]. Я немного подчистил свой пост, удалив определения для дополнительных потоков и процедуры сопоставления. Должно быть очевидно, чего я хочу без них.   -  person Matt    schedule 15.10.2012
comment
Да, вы хотите бесконечный поток. Какую часть создания вы не знаете, как делать? Или вы просто хотите, чтобы люди написали весь код, который вы еще не написали?   -  person itsbruce    schedule 15.10.2012
comment
Нет, совсем нет. Я сказал, что знаю, что это должно быть что-то вроде... выше. Мне не хватает ключевой детали. Поверьте мне, я потратил часы, пытаясь понять это, и мне не повезло.   -  person Matt    schedule 15.10.2012
comment
Да, но поскольку в вашем ответе отсутствует все, что касается ваших мыслей, кроме базовой спецификации, как кто-то еще может знать, какой ключевой элемент вам не хватает? Это все равно, что сказать, что я хочу построить машину, и не объяснить, что вас побеждает — колеса или двигатель.   -  person itsbruce    schedule 15.10.2012
comment
Если вы не знаете, как определить потоки добавления, так и скажите.   -  person itsbruce    schedule 15.10.2012
comment
Прости, Брюс... Я вернулся и перечитал его, и мне трудно понять, что еще я должен сказать. Мне нужен поток матриц 2x2, каждая в виде списка, где каждая матрица вглубь, эта матрица изменяется по формуле [k (4k+2) 0 (2k+1)], где k - это k-я матрица. Я подумал, что может быть полезно сказать, как я могу создать поток из единиц и целых чисел, чтобы иметь возможность сделать это, поскольку я знаю, что у меня есть довольно близко (в моем посте).   -  person Matt    schedule 15.10.2012
comment
давайте продолжим это обсуждение в чате   -  person Matt    schedule 15.10.2012
comment
Хорошо, редактирование делает это немного более ясным. Итак, что входит в _______, с чем вам нужна помощь? Теперь я понимаю. И если бы мне не нужно было выбегать на улицу, чтобы добраться до работы, я бы написал правильный ответ сейчас;)   -  person itsbruce    schedule 15.10.2012
comment
После всего этого, Мэтт, я надеюсь, это пошло тебе на пользу.   -  person itsbruce    schedule 16.10.2012


Ответы (1)


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

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

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

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

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

person itsbruce    schedule 15.10.2012
comment
Эй, спасибо, Брюс, это хорошие советы. Да, у меня все заработало! Мне пришлось использовать метод добавления потоков, как вы говорите, только что измененный. Поэтому я написал add-2x2, который выполняет базовое сложение матриц, и использовал карту потоков SICP с этой процедурой. Мне также пришлось реконструировать поток, как вы упомянули в-третьих, чтобы создать постоянный поток матрицы, который будет постоянно добавляться. Видел ваш пост ранее, но имел доступ к стеку только через мой телефон. Хотел написать вам спасибо за помощь. - person Matt; 16.10.2012