Почему мой цикл недопустим - PullRequest
0 голосов
/ 03 декабря 2011

Я создал две субмарины, одну для Фибоначчи, а другую для проверки четных чисел. Когда я называю это, хотя он говорит, что мой цикл for в строке 7, подпункт Фибоначчи недопустим почему?

#!/usr/bin/perl
use strict;
use warnings;


my ($x,$y);
my $num = 0;

sub Fibs($start,$stop){
    for ($start..$stop){
        ($x, $y) = ($y, $x+$y);
            my $total += $y;
        }
    print "$total \n"
}

sub even($num){
    if ($num % 2 == 0){
        return $num;}
}

my $big_total = Fibs(even($num), 3999999)

Отредактировано из предложений ниже.

Я явно что-то упускаю. От обратной связи обновляется до новой версии.

#!/usr/bin/perl
use strict;
use warnings;


my ($x,$y);
my $num = 0;

sub Fibs{
    my ($start, $stop) = @_ ;
    for ($start..$stop){
        my ($x, $y) = (0,2);
            if ($x % 2 == 0){
                ($x, $y) = ($y, $x+$y);
                    my $total += $y;
        }
}

my $big_total = Fibs(0, 3999999)

1 Ответ

4 голосов
/ 03 декабря 2011

В дополнение к отсутствующим открывающим скобкам Perl не поддерживает такого рода объявления для параметров подпрограммы.

Вместо

sub Fibs($start, $stop) {
    ...
}

вам нужно написать что-то вроде:

sub Fibs {
    my($start, $stop) = @_;
    ...
}

(У Perl есть прототипы, но они не предназначены для объявления типов параметров, и они не предоставляют имен. См. эту статью для обсуждения.)

Другие проблемы:

Вы должны добавить

use strict;
use warnings;

Вы никогда не используете $x и $y, которые вы объявляете во внешней области видимости.

Ваша функция even выглядит неполной. Он не (явно) возвращает значение, если его аргумент является нечетным числом. Что именно он должен делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...