Racket 使用递归的球拍列表错误

Racket 使用递归的球拍列表错误,racket,Racket,我正在尝试使用Racket中的列表来完成一个学校问题。使用递归是一个简单的问题,但我无法理解为什么我的代码不能工作。我们应该搜索列表,如果提供的项与列表中的项匹配,则返回true。这就是我到目前为止所做的: (define (containsAnywhere test list) (cond ((null? list) '()) (equal?((car list) test)) (else(containsAnywhere (test (cdr list))))

我正在尝试使用Racket中的列表来完成一个学校问题。使用递归是一个简单的问题,但我无法理解为什么我的代码不能工作。我们应该搜索列表,如果提供的项与列表中的项匹配,则返回true。这就是我到目前为止所做的:

(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))