У меня есть задача с бесконечными списками.ERLANG, бесконечный список Фибоначчи с использованием zipWith
Я должен написать zipWith/3 для бесконечных списков - сделано
Я должен использовать этот zipWith/3, чтобы создать бесконечный список чисел Фибоначчи с Фибо/0 - проблема
я должен написать выдумки (N), принимая первые N элементов из Фибо() - сделано
Это то, что я до сих пор:
-module(zipWith).
-export([take/2, zipWith/3, fib/0]).
take(0, _) -> [];
take(N, [H|LazyT]) -> [H | take(N-1, LazyT())].
zipWith(F, [H1|L1], [H2|L2]) -> [F(H1, H2) | fun() -> zipWith(F, L1(), L2()) end].
fib() -> ...
fib(L) -> zipWith(fun(X,Y) -> X + Y end, L(), tl(L())).
fibs(N) -> take(N, fib()).
Я знаю приврать/1 должен выглядеть следующим образом (я довольно сюр е-исправьте меня, если я ошибаюсь). Принимая сам список и список без головы. Поэтому в случае [0,1, ...] zipWith (add, [0,1, ...], [1, ...]) приводит к добавлению последних двух чисел. Но все, что я пытаюсь как начало этого fib() -> ..., приводит к ошибкам. Я хочу выразить это примерно так: fib() -> fib ([[0,1] ++ fun() -> ... end] ...)
Я как-то хотел начать фид/1 с [0,1, fun() ...], но не узнайте, как запустить список.
Заранее спасибо за советы
Проблема в том, что задача говорит использовать zipWith. Я попробую и посмотрю, что ваш подход может мне помочь. Благодарю. – user3556115
Чем вы очень. – user3556115
Не могли бы вы объяснить, когда случай e (L) is_list и когда is_function произойдет и почему мы должны сделать это различие? Я этого не понимаю. Я думал, что это должно работать без e(), потому что всегда есть список Lazy, который всегда забавный, но в некоторых случаях он должен быть другим. Где? – user3556115