我有两个列表,其中包含下一个内容:
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))
我该怎么做?谢谢你的帮助!
答案 0 :(得分:0)
(cond (not (null? l1) ...))
此表单将评估not
结果为#<procedure:not>
的过程,因为除了#f
之外的所有内容都为真,它将开始评估从{{1}开始的链的其余部分} ..
你没有关于如何工作的例子,所以我把它留在那里。对于Scheme来说,这太迫切了。