Saya punya tugas dengan daftar tak terbatas.
Saya harus menulis zipWith/3 untuk daftar tak terbatas - selesai
Saya harus menggunakan zipWith/3 ini untuk membuat daftar angka fibonacci yang tak terbatas dengan fib/0 - masalah
Saya harus menulis fibs(N) dengan mengambil N elemen pertama dari fib() - selesai
Inilah yang saya miliki sejauh ini:
-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()).
Saya tahu fib/1 akan terlihat seperti ini (saya cukup yakin - koreksi saya, jika saya salah). Mengambil daftar itu sendiri dan daftar tanpa kepala. Jadi dalam kasus [0,1,...] zipWith(add,[0,1,...],[1,...]) menghasilkan penjumlahan dua angka terakhir. Tapi apa pun yang saya coba sebagai awal dari fib()->... ini menghasilkan kesalahan. Saya ingin mengungkapkannya seperti ini: fib() -> fib([[0,1] ++ fun() -> ... end]...)
Saya entah bagaimana ingin memulai fib/1 dengan [0,1,fun()...] tetapi tidak mengerti bagaimana cara memulai daftarnya.
Terima kasih sebelumnya atas sarannya