Попытка понять рекурсию и почему происходит ошибка - PullRequest
0 голосов
/ 09 февраля 2019

Я пишу программу, которая принимает список и выводит значение true, если элементы в списке чередуются.Например, если первое число положительное, второе число должно быть отрицательным, а затем третье число снова должно быть положительным и т. Д.

Я попытался реализовать простое выражение cond (показано в коде), нопродолжаю сталкиваться с ошибкой в ​​моем чеке.Ошибка гласит: first: expects only 1 argument, but found 2.

(define (alternating? lst)
(cond [(empty? lst) true]
[(> (first lst) 0)
 (cond [(< (first (rest lst) 0)) (alternating? (rest lst))])]
[(< (first lst) 0)
 (cond [(> (first (rest lst) 0)) (alternating? (rest lst))])]
[else false]))

Когда вы смотрите на код, он выглядит так, будто сначала он принимает только один аргумент из списка, но ошибка говорит о том, что это не так.

1 Ответ

0 голосов
/ 09 февраля 2019

В строках 3 и 5 вы правильно вызываете first с одним аргументом, а именно: lst:

(first lst)

В строках 4 и 6 вы звоните first с два аргумента, а именно (rest lst) и 0:

(first (rest lst) 0)

Я думаю , что вы хотите, это:

(< (first (rest lst)) 0)
;                   ↑   ↑

вместо этого:

(< (first (rest lst) 0))
;                   ↑  ↑
...