在课堂上,当我们不需要使用长度功能时,我们会被指示不使用长度功能。我知道如何创建一个计算列表长度的函数,但我想知道如何将长度作为条件放入cond或不使用长度。
我有:
(define (thing ls)
(if (> (length ls) 10)
'p
'q))
(define (thing2 ls)
(cond
[(> (add1 (thing2 (rest ls))) 10) 'p]
[else 'q]))
底部的一个给了我:"休息:期望一个非空的列表;给出:'()"
我该怎么做?
答案 0 :(得分:2)
您可以通过将能够回答'p
之前需要遇到的最少元素数作为参数传递来解决此问题。请注意,第一个基本案例阻止我们离开列表:
(define (thing ls n)
(cond [(empty? ls) 'q]
[(zero? n) 'p]
[else (thing (rest ls) (sub1 n))]))
按预期工作:
(thing '(1 2 3 4 5 6 7 8 9 10) 10)
=> 'q
(thing '(1 2 3 4 5 6 7 8 9 10 11) 10)
=> 'p