不同列表中的长度

时间:2014-02-11 11:26:12

标签: list scheme racket

我有两个列表,其中包含下一个内容:

l1 = ((at1) (at2))

l2 = (((at11) (at21))((at12) (at22)))

l2创建l1

问题是:我认为l1就像一个问题的实例,所以l2将是同一问题的两个实例,但是当我使用(长度为l1)时,结果为2,这种方法不正确。 我试过(列表l1),结果是(长度l1)= 1,但是这个结果我的函数不能很好地创建l2

我尝试使用此代码,但是,使用这两个列表,它不能正常工作。有了它,l2可以创建另一个列表l3,但l1无法创建l2。代码是:

(define (applyfunc l1)
  (let ((l2 '()))
    (cond ((not(null? l1))
              (for/list ([i (length l1)])
                (set! l2 (append l2 (func l1))) 
                )
              )
          )
    l2)
)

(applyfunc ((at1) (at2))...)应该返回属性at1和at2的特化,即l2。但是,使用上面的代码,它不起作用,因为它需要l1 = ((at1) (at2))两个部分,(长度l1 = 2)而不像实例。如果我使用l2,它包含2个实例,因此,结果将是l3,每个属性有2个属性,即类似l2的列表,包含4个实例和2个属性每一个。问题是,当l1输入时,它会考虑(at1)(at2),但不会考虑((at1)(at2))我该怎么做?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

(cond (not (null? l1) ...))

此表单将评估not结果为#<procedure:not>的过程,因为除了#f之外的所有内容都为真,它将开始评估从{{1}开始的链的其余部分} ..

你没有关于如何工作的例子,所以我把它留在那里。对于Scheme来说,这太迫切了。