如何在不使用长度函数的条件长度的cond / if子句中有条件?

时间:2016-04-07 00:50:20

标签: scheme racket

在课堂上,当我们不需要使用长度功能时,我们会被指示不使用长度功能。我知道如何创建一个计算列表长度的函数,但我想知道如何将长度作为条件放入cond或不使用长度。

我有:

(define (thing ls)
  (if (> (length ls) 10)
      'p
      'q))

(define (thing2 ls)
  (cond
    [(> (add1 (thing2 (rest ls))) 10) 'p]
    [else 'q]))

底部的一个给了我:"休息:期望一个非空的列表;给出:'()"

我该怎么做?

1 个答案:

答案 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