List 如何构建一个函数,如;列表功能“;

List 如何构建一个函数,如;列表功能“;,list,racket,List,Racket,如何通过定义结构来模拟“列表?函数” 我想将struct定义为二叉树,并检查每个mycons的正确节点是makemycons还是empty 只关注检查右节点是否需要为mycons或空 (我已经从github找到了list?的sourece代码,但超出了我的能力。) 列表的简单版本?: (define (my-list? x) (cond [(eq? x '()) #t] [(pair? x) (my-list? (cdr x))] [else #

如何通过定义结构来模拟“列表?函数”

我想将struct定义为二叉树,并检查每个mycons的正确节点是makemycons还是empty

只关注检查右节点是否需要为mycons或空

(我已经从github找到了list?的sourece代码,但超出了我的能力。)


列表的简单版本?

(define (my-list? x)   
  (cond
    [(eq? x '()) #t]
    [(pair? x)   (my-list? (cdr x))]
    [else       #f])

内置的
列表?
更智能。调用
cons
时,它检查最后一个参数是否是列表,如果是列表,则在cons单元格的内部表示中翻转一点。这意味着内置的
列表?
是O(1),而不是上述解决方案中的O(n)。

一个简单版本的
列表?

(define (my-list? x)   
  (cond
    [(eq? x '()) #t]
    [(pair? x)   (my-list? (cdr x))]
    [else       #f])

内置的
列表?
更智能。调用
cons
时,它检查最后一个参数是否是列表,如果是列表,则在cons单元格的内部表示中翻转一点。这意味着内置的
list?
是O(1),而不是上面的解决方案中的O(n)。

我一直想知道
list?
的racket不可变列表是O(1),因为我在性能测试中看到了这一点。我尝试了(pair?(cons 3 4))->35; t但我期望#f,因为正确的节点是空的或cons。它是一对,但不是列表。只有当第二个元素是列表时,pair才是列表的第一对。谢谢您的回答。但是如果我们只是使用(cons1empty)之类的东西,那么我们就构建这个列表。它看起来像二叉树。每个左节点都是数字,每个右节点都是cons或空的。(cons 1(cons 2 empty))这不像(cons 1(cons 2 3))我想我误解了你的要求,但是
(cons 1(cons 2 empty))
是一个列表,而
(cons 1(cons 2 3))
不是。我想知道racket不可变列表是O(1)表示
列表?
,因为我在性能测试中看到了这一点。我尝试了(配对)?(cons 3 4))->#t但我期望#f,因为右侧节点为空或cons。这是一对,但不是列表。只有当列表的第二个元素是列表时,一对才是列表的第一对。感谢您的回答。但是如果我们只使用类似(cons 1 empty)的内容,请不要使用(cons 1 2)然后我们建立这个列表。它看起来像二叉树。每个左节点都是数字每个右节点都是cons或空的。(cons 1(cons 2 empty))它不像(cons 1(cons 2 3))我想我误解了你的要求,但是
(cons 1(cons 2 empty))
是一个列表,而
(cons 1(cons 2 3))
不是。