Racket 使用递归的球拍列表错误
我正在尝试使用Racket中的列表来完成一个学校问题。使用递归是一个简单的问题,但我无法理解为什么我的代码不能工作。我们应该搜索列表,如果提供的项与列表中的项匹配,则返回true。这就是我到目前为止所做的:Racket 使用递归的球拍列表错误,racket,Racket,我正在尝试使用Racket中的列表来完成一个学校问题。使用递归是一个简单的问题,但我无法理解为什么我的代码不能工作。我们应该搜索列表,如果提供的项与列表中的项匹配,则返回true。这就是我到目前为止所做的: (define (containsAnywhere test list) (cond ((null? list) '()) (equal?((car list) test)) (else(containsAnywhere (test (cdr list))))
(define (containsAnywhere test list)
(cond
((null? list) '())
(equal?((car list) test))
(else(containsAnywhere (test (cdr list))))))
但我得到了以下错误:
application: not a procedure;
expected a procedure that can be applied to arguments
given: 1
arguments.:
这里您将test
应用于参数(cdr列表)
,就好像test
是一个函数,但它不是。这就是错误
您的意思大概是(containsAnywhere测试(cdr列表))
,它通过了test
作为containsAnywhere
的第一个参数,通过了(cdr列表)
作为第二个参数
这里您将test
应用于参数(cdr列表)
,就好像test
是一个函数,但它不是。这就是错误
您大概是指(containsAnywhere test(cdr list))
,它通过test
作为containsAnywhere
的第一个参数,通过(cdr list)
作为第二个参数。一些评论:
- 不要调用您的参数
,该名称的内置过程将以这种方式隐藏;在Scheme中,通常调用参数列表
lst
- 您有很多括号错误-过程调用类似于
),而(过程参数1 param2…
中的条件在括号中cond
谓词后面有一个equal?
?
- 代码的缩进被关闭;使用Racket博士的“reindent all”功能
- 我假设您的过程的结果应该是True或False,因此空列表应该返回
,而不是#f
'()
cond
中,我将要计算的条件和表达式放在单独的行中,以便代码和括号变得更清晰:
(定义(包含全方位测试lst)
(续)
((空?lst)
#(f)
((相等)(车辆lst)试验)
#(t)
(其他
(容器全方位测试(cdr lst‘‘‘‘)’)
或者,我会这样编码:
(定义(包含所有tst lst)
(和(非(空?lst))
(或(同等)(车辆lst)tst)
(包含所有tst(cdr lst(()())))
一些评论:
- 不要调用您的参数
,该名称的内置过程将以这种方式隐藏;在Scheme中,通常调用参数列表
lst
- 您有很多括号错误-过程调用类似于
),而(过程参数1 param2…
中的条件在括号中cond
谓词后面有一个equal?
?
- 代码的缩进被关闭;使用Racket博士的“reindent all”功能
- 我假设您的过程的结果应该是True或False,因此空列表应该返回
,而不是#f
'()
cond
中,我将要计算的条件和表达式放在单独的行中,以便代码和括号变得更清晰:
(定义(包含全方位测试lst)
(续)
((空?lst)
#(f)
((相等)(车辆lst)试验)
#(t)
(其他
(容器全方位测试(cdr lst‘‘‘‘)’)
或者,我会这样编码:
(定义(包含所有tst lst)
(和(非(空?lst))
(或(同等)(车辆lst)tst)
(包含所有tst(cdr lst(()())))
(test (cdr list))