Recursion 试图理解递归以及错误发生的原因

Recursion 试图理解递归以及错误发生的原因,recursion,scheme,racket,Recursion,Scheme,Racket,我正在写一个程序,它接收一个列表,如果列表中的元素交替符号,则输出true。例如,如果第一个数字为正,第二个数字必须为负,然后第三个数字必须再次为正,依此类推 我曾尝试实现一个简单的cond语句(如代码所示),但在检查expect时不断遇到错误。错误状态为:first:只需要1个参数,但找到2个 (define (alternating? lst) (cond [(empty? lst) true] [(> (first lst) 0) (cond [(< (first (rest

我正在写一个程序,它接收一个列表,如果列表中的元素交替符号,则输出true。例如,如果第一个数字为正,第二个数字必须为负,然后第三个数字必须再次为正,依此类推

我曾尝试实现一个简单的cond语句(如代码所示),但在检查expect时不断遇到错误。错误状态为:
first:只需要1个参数,但找到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]))
(定义(交替?lst)
(cond[(空?lst)true]
[(>(第一个lst)0)
(第二次[(<(第一次(休息时)0))(交替(休息时)))]
[(<(第一个lst)0)
(第二个[(>(第一个(休息第一个)0))(交替(休息第一个)))]
[否则为假])

查看代码时,看起来first实际上只接受列表中的一个参数,但错误表明情况并非如此。

在第3行和第5行,您正确地使用一个参数调用了
first
,即
lst

(first lst)
在第4行和第6行,您使用两个参数调用
first
,即
(rest lst)
0

(first (rest lst) 0)
我想你想要的是:

(< (first (rest lst)) 0)
;                   ↑   ↑
(<(第一个(剩余的第一个))0)
;                   ↑   ↑
与此相反:

(< (first (rest lst) 0))
;                   ↑  ↑
(<(第一个(剩余的第一个)0))
;                   ↑  ↑