使用字符串检查字符串列表?

时间:2015-02-25 16:51:24

标签: string lisp racket

您好我在测试列表时遇到一些麻烦,看看列表是否只包含字符串。我正在阅读文档2.3(迭代和递归)+ 3.12(条件语句),我似乎无法以我想要的方式工作列表。

我试图让它尽可能简单,

(define (strings-only? lst)
  [cond
    [(empty? lst) true]
    [else (string?(first lst))
          (string?(rest lst))]])

我认为这样做首先检查列表(lst)以查看它是否为空。 然后它检查列表的第一个变量,看它是否是一个字符串,然后检查其余的。当我放入

(define a (list "This" "that"))

它弹回来说测试是错误的。我觉得问题在于我试图通过第一次/休息迭代列表。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:3)

检查您的else条款:

[else (string? (first lst))
      (string? (rest lst))]

1)你有两个谓词调用,它们都返回一些布尔值,但你不能以任何方式连接它们。你想知道列表中的所有元素是否是字符串,那么布尔运算符(andor等)最适合这里?

2)(string? (rest lst))每次都会返回false,因为rest返回一个列表,而不是一个字符串。要真正使其成为递归函数,您需要使用strings-only?的{​​{1}}再次调用rest


总结:

lst

使用在这里最有意义的布尔运算符填充空白。

答案 1 :(得分:2)

您可以使用内置的andmap功能来完成此操作

(define (strings-only? lst)
  (andmap string? lst))