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
List 如何返回列表列表中的所有元素?(公共小巴计划)_List_Recursion_Scheme_Racket - Fatal编程技术网

List 如何返回列表列表中的所有元素?(公共小巴计划)

List 如何返回列表列表中的所有元素?(公共小巴计划),list,recursion,scheme,racket,List,Recursion,Scheme,Racket,比如说,, 如果输入为: (名单(名单1)(名单2)(名单3)) 输出将是: (列表1 2 3) 为什么这个代码不起作用 (define (listoutput mylist) (cond [(empty? mylist) empty] [(cons? mylist) (append (list (first list)) (listoutput (rest mylist)))])) (check-expect (listoutput (list (list 1) (lis

比如说,, 如果输入为: (名单(名单1)(名单2)(名单3)) 输出将是: (列表1 2 3)

为什么这个代码不起作用

(define (listoutput mylist)
  (cond
    [(empty? mylist) empty]
    [(cons? mylist) (append (list (first list)) (listoutput (rest mylist)))]))

(check-expect (listoutput (list (list 1) (list 2) (list 3)))
              (list 1 2 3)

事实上你很接近。以下是一些可能有帮助的问题:

listoutput的合同/签名是什么

附加的合同/签名是什么

另外,我建议您首先构建最简单的示例,每个示例都基于前面的示例。比如说,

(check-expect (listoutput empty)) ???)
(check-expect (listoutput (cons (list 1) empty)) ???)
如果第一个测试通过,但第二个测试失败,那么根据函数的结构,这意味着问题在哪里

[(cons? mylist) (append (list (first list)) (listoutput (rest mylist)))]))

那行有两个错误。最明显的是,它应该是
(第一个mylist)
,而不是
(第一个列表)
(尽管我希望您确实知道这一点,并且输入错误)。第二个是
(第一个mylist)
返回一个列表(因为您得到的是一个列表列表),但在将其传递给append之前,使用
list
函数将其包装。因此,在您的示例中,您在第一次调用它时并没有将
(列表1)
传递给
append
,而是将它传递给
(列表1))
。您只需从该表达式中删除
列表
函数。

如果您要求执行
展平
过程,请尝试以下操作:

(define (flatten lst)
  (cond ((empty? lst) null)
        ((not (list? lst)) (list lst))
        (else (append (flatten (first lst))
                      (flatten (rest lst))))))
您可以测试它:

(flatten  (list (list 1) (list 2) (list 3)))
> (1 2 3)
(flatten '(1 (2 (3)) (4)))
> (1 2 3 4)

“展平”是否也适用于树,或者是否有一个等价物?列表列表形成一棵树,所以可以这么说。为什么不给它一个测试呢?也许要指出一个明显的问题,
check expect
缺少一个接近的参数。