试图输出一个列表,而不是得到一个单一的价值

Trying to output a list but instead getting a single value

; alon: a list of names
; alob: a list of boolean 
(define (findNamev4 alon alon2 alob)  
  (cond
    [(empty? alon) #false]
    [(string=? (first alon) (first alon2)) (cons #true lob)]
    [else (findNamev4 (rest alon) (first (rest alon2)) alob)]))
    
    
(findNamev4 l1 l2 lob)
(findNamev4 l2 l2 lob)
(list #true)
(list #true)
(list #true)

我建议按如下方式进行:

(define (compare-string-lists strs-1 strs-2)
  (cond
   [(or (empty? strs-1) (empty? strs-2)) empty]
   [else
    (cons (string=? (first strs-1) (first strs-2))
          (compare-string-lists (rest strs-1) (rest strs-2)))]))

您没有指定如果列表长度不同应该发生什么;此版本只会比较两个列表中较短列表中存在的尽可能多的元素。

一个解释:

  • 第一个案例是我们的基本案例。如果两个列表中的任何一个为空,那么我们就不需要将比较添加到我们的比较列表中,因此我们可以 return 一个空列表。
  • 第二种情况就是我们的递归情况。我们要比较每个列表的第一个元素,然后将结果(使用 cons)附加到包含我们输入列表其余部分的比较结果的列表。