Scheme函数返回两个输入的较长列表

时间:2015-04-06 14:21:32

标签: scheme

我想编写一个带有两个列表参数的函数,并返回两个输入的较长列表。如果两个列表的长度相等,则函数返回#t,如果其中一个参数不是列表,则函数应返回#f。

样品运行:

  • (较长名单'(1 2 3 4)'(a b c d e))返回(a b c d e)
  • (较长列表'(d e f)'(4 5 6))返回#t(或true)
  • (较长列表'(g h i)3)返回#f(或false) 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

似乎你需要做一个案例分析。您需要检查其中一个参数是否不是列表并返回#f,然后如果不是,您需要获取两个列表的长度以检查它们是否长度相等或是否为列表比另一个更糟糕。这样的事可能呢?

(define (longest lst1 lst2)
  (if <??> ; check if one of the argument is not a list
      #f   
      (let ((len1 <??>) (len2 <??>))
        (cond ((= <??> <??>) #t)   ; same length
              ((< <??> <??>) <??>) ; lst1 shorter than lst2
              (else <??>>)))))     ; lst2 shorter than lst1

这似乎是一项任务,所以我让你填补空白。

答案 1 :(得分:0)

(define (longer-list a b)
  (and (list? a)
       (list? b)
       (let ll ((aa a) (bb b))
         (cond
           ((and (null? aa) (null? bb)) #t)
           ((null? aa) b)
           ((null? bb) a)
           (else (ll (cdr aa) (cdr bb)))))))