Tôi đã xem xét nhiều cách khác nhau để xây dựng danh sách lười biếng trong Perl 6 và tôi muốn thu thập tất cả các cách ngắn gọn để mô tả chuỗi Fibonacci.Có bao nhiêu cách để mô tả chuỗi Fibonacci trong Perl 6?
tôi sẽ bắt đầu này ra với ba từ masak 's tạp chí:
my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);
my @fibs := (0, 1, { $^a + $^b } ... *);
my @fibs := (0, 1, *+* ... *);
Tôi đã suy nghĩ một cái gì đó như thế này cũng sẽ làm việc, nhưng tôi nghĩ rằng tôi có sai cú pháp:
my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));
Có thứ gì đó háo hức (lát cắt?) Và khiến Rakudo bước vào vòng lặp vô hạn. Đó là một bản dịch của định nghĩa Haskell:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Cập nhật:
Có vẻ như vấn đề với ví dụ zipWith
là @fibs[1..*]
lát. nếu tail
được định nghĩa là sub tail (@x) {my $i = 1; {@x[$i++]}...*}
thì nó hoạt động bình thường. Tôi sẽ được quan tâm để biết tại sao lát không phải là lười biếng từ bất cứ ai quen thuộc với ruột của Rakudo.
Một số khác tốt đẹp là:
my @fibs := (0, [\+] 1, @fibs);
Đây là một trong những lý do tôi thích Perl 6. :) –
là câu hỏi về lỗi của bạn, tương đương khoảng càng tốt các giải pháp khác? Mã của bạn thiếu dấu ngoặc đơn đóng, nếu cú pháp của Perl 6 không lạ hơn tôi nghĩ ... –
Bạn đã thử mã của mình trên Pugs chưa? –