Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List “;mcar:需要类型为<;的参数;可变对>;;给定()”;类成员函数_List_Function_Scheme_Boolean_Racket - Fatal编程技术网

List “;mcar:需要类型为<;的参数;可变对>;;给定()”;类成员函数

List “;mcar:需要类型为<;的参数;可变对>;;给定()”;类成员函数,list,function,scheme,boolean,racket,List,Function,Scheme,Boolean,Racket,我想知道如果我输入的元素不在列表中,会出现什么问题。在那里它显示了一个错误。--mcar:需要类型为的参数;给定()当您到达列表末尾时会发生什么?类似于(1 2 3)的列表实际上是一个cons单元格链: (define fun3 (lambda (item list) (cond ((equal? item (car list))) ((fun3 item (cdr list))) (else #f)))) 使用汽车可以获得左侧的东西,使

我想知道如果我输入的元素不在列表中,会出现什么问题。在那里它显示了一个错误。
--mcar:需要类型为的参数;给定()

当您到达列表末尾时会发生什么?类似于
(1 2 3)
的列表实际上是一个cons单元格链:

(define fun3
  (lambda (item list) 
    (cond ((equal? item (car list))) 
          ((fun3 item (cdr list)))
          (else #f))))
使用
汽车
可以获得
左侧的东西,使用
cdr
可以获得右侧的东西。考虑在<代码>(1×2)< <代码> >代码中搜索“<代码> 4”/代码>时发生的情况:

(1 2 3) == (1 . (2 . (3 . ())))
最后,您将返回到这样的情况:
是(仍然)
4
,而
列表
(3)()
。现在,将调用
(fun3项(cdr列表))
,然后
项将(仍然)是
4
,但
列表将是
()
。您不能调用
(car())
,因为
()
不是cons单元格。您需要明确检查
list
是否为空列表:

(define fun3
  (lambda (item list) 
    (cond ((equal? item (car list))) 
          ((fun3 item (cdr list)))
          (else #f))))
可以大大简化为
返回!条件。您看到您的代码与此类似吗?特别是,您的第二个案例是
(fun3项(cdr列表))
。如果它是真的,那么你返回真的。如果它是假的,那么你转到下一个案例,然后…返回false。这意味着您可以简单地返回
(fun3项(cdr列表))
的值

  • 更重要的问题是,您说过要检查
    是否是列表或其任何子列表的元素,但您的代码现在(等待检查空列表的修复)只检查
    是否是
    列表
    的成员,而不是其任何子列表。当
    项目
    不等于
    (车辆列表)
    时,可能是因为
    (车辆列表)
    是另一个列表,您需要递归到to并检查
    项目
    是否在其中。你可能会从中得到帮助,但它不会告诉你怎么做

  • 如果您在racket中使用可变列表/对,您必须记住它是与常规列表完全不同的数据类型,在常规列表中使用()语法。 当您通过调用“请求”库处理可变数据时: (请求方案/mpair)
    现在,在构造对、谓词等时,您必须切换到使用该库中的相应过程-mcar、mcdr、mpair、mlist、mcons。否则,无法接收来自“mcons”的错误。

    我输入(fun3'w(list'a'b))来执行此操作,但它会显示前面提到的错误。如果它找到了元素,那么就没有错误。另请参阅。非常感谢,伙计。是我的错。我会记住的。
    (define fun3
      (lambda (item list) 
        (cond ((null? list) <...>)
              ((equal? item (car list))) 
              ((fun3 item (cdr list)))
              (else #f))))
    
    if ( condition ) {
      return false;
    }
    else {
      return true;
    }