Я в основном хочу то же самое, что и этот OP: -condition-is-met">Есть ли идиома J для добавления в список до тех пор, пока не будет выполнено определенное условие? Но я не могу получить ответы для работы с функцией OP или моей собственной. Я перефразирую вопрос и напишу об ответах внизу.
Я пытаюсь создать функцию, которая будет возвращать список чисел Фибоначчи менее 2 000 000. (без записи «пока» внутри функции). Вот что я пробовал:
Во-первых, я выбрал способ вычисления чисел Фибоначчи с этого сайта: https://code.jsoftware.com/wiki/Essays/Fibonacci_Sequence
fib =: (i. +/ .! i.@-)"0
echo fib i.10
0 1 1 2 3 5 8 13 21 34
Затем я составил произвольный список, который, как я знал, был больше, чем мне нужно. :
fiblist =: (fib i.40) NB. THIS IS A BAD SOLUTION!
Наконец, я удалил числа, которые были больше, чем мне нужно:
result =: (fiblist < 2e6) # fiblist
echo result
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1.34627e6
Это дает правильный результат, но есть ли способ избежать использования произвольного числа, например 40, в «fib i.40»?
Я хотел бы написать функцию, чтобы «func 2e6» возвращала список чисел фибоначчи ниже 2 000 000. (без записи «пока» внутри функции).
echo func 2e6
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1.34627e6
вот ответы на другой вопрос:
первый ответ:
2 *^:(100&>@:])^:_"0 (1 3 5 7 9 11)
128 192 160 112 144 176
второй ответ:
+:^:(100&>)^:(<_) ] 3
3 6 12 24 48 96 192
Насколько я понимаю, мне просто нужно заменить функции, используемые в ответах, но я не понимаю, как это может работать. Например, если я попытаюсь:
echo (, [: +/ _2&{.)^:(100&>@:])^:_ i.2
Я получаю сообщение об ошибке.
x
числа Фибоначчи, а также Фибоначчи доx
, Трибоначчи и т. д. pastebin.com/fKZFU60P - person Gregory Higley   schedule 01.09.2018