Scheme 如果不使用length函数,如何在cond/if子句中设置关于列表长度的条件?

Scheme 如果不使用length函数,如何在cond/if子句中设置关于列表长度的条件?,scheme,racket,Scheme,Racket,在课堂上,我们被告知不需要使用长度函数。我知道如何制作一个计算列表长度的函数,但我想知道如何将长度作为条件,如果不使用长度 我有: (define (thing ls) (if (> (length ls) 10) 'p 'q)) (define (thing2 ls) (cond [(> (add1 (thing2 (rest ls))) 10) 'p] [else 'q])) 底部的一个给了我:“rest:需要一个非空列表;gi

在课堂上,我们被告知不需要使用长度函数。我知道如何制作一个计算列表长度的函数,但我想知道如何将长度作为条件,如果不使用长度

我有:

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

(define (thing2 ls)
  (cond
    [(> (add1 (thing2 (rest ls))) 10) 'p]
    [else 'q]))
底部的一个给了我:“rest:需要一个非空列表;given:'()”


如何执行此操作?

您可以通过将回答
'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

您可以通过将在能够回答
'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

我们在课堂上还没有拿到cdr。有没有办法使
thing2
东西一样工作
还是不可能?在计算
(rest ls)
之前,您从不检查
ls
是否为空。(对于“真实世界”的方案代码来说,依赖于列表的长度并不常见。通常,您是围绕列表的结构而不是大小来编写代码的。)我们在课堂上还没有得到cdr。有没有办法使
thing2
东西一样工作
还是不可能?在计算
(rest ls)
之前,您从不检查
ls
是否为空。(对于“真实世界”的方案代码来说,依赖于列表的长度并不常见。通常,您是围绕列表的结构而不是大小编写代码的。)