(wx)Maxima: `makelist` работает параллельно или последовательно?

Я заинтересован в создании списка, термины которого определяются рекурсивно (т. е. term[i] является функцией term[i-1], не функцией i-1).

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

Первоначальная попытка (примечание: несмотря на то, что вывод здесь можно было получить с помощью функции индекса, смысл состоял в том, чтобы создать простой пример, проверяющий возможность вызова предыдущих терминов в пределах makelist):

test:
makelist(block([ ], 
    
    /* list item set to 1 for first term of the list, and to previous list item, thereafter */  
    if i = 1 
    then addend 
    else test[i-1]
    )

, i, 5);

но это возвращает [1, test[1], test[2], test[3], test[4] ], поэтому, похоже, на самом деле он не обращается к значениям test.

Я пробовал разные эксперименты, включая инициализацию test; включая вызов теста в блоке, т.е. block([ test:test ], ... , и несколько других, но не смогли получить желаемого результата.


person Rax Adaam    schedule 22.02.2021    source источник


Ответы (1)


Это большой вопрос. Результат makelist не связан с переменной, которой он назначен (test в приведенном выше примере), поэтому, пока makelist строит свой результат, невозможно узнать, что test[i - 1] является предыдущим элементом. Я не думаю, что есть какой-либо способ получить доступ к предыдущему элементу из makelist (например, с помощью какого-либо программирования на Лиспе или чего-то еще).

Насчет того, что makelist является последовательным или параллельным, я на 99% уверен, что элементы построены по порядку. Например. makelist(print(i), i, 1, 10) печатает числа от 1 до 10.

Если термин зависит от предыдущего, один из способов сделать это — создать пустой список (например, x: makelist(0, n)), а затем перебрать элементы (например, x[1]: FOO; for i:2 thru n do x[i]: x[i - 1] + something).

person Robert Dodier    schedule 22.02.2021
comment
Спасибо, Роберт, всегда интересно узнать больше о внутренней работе Maxima! Как всегда, большое спасибо за то, что вы нашли время, чтобы поделиться своими знаниями и пониманием! - person Rax Adaam; 24.02.2021