您好,我在测试列表以查看列表是否仅包含字符串时遇到了一些麻烦。我正在阅读文档 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"))
它弹出测试是错误的。我觉得问题出在我尝试使用第一个/其余部分迭代列表的方式。任何想法将不胜感激。
最佳答案
检查您的 else
子句:
[else (string? (first lst))
(string? (rest lst))]
1) 您有两个谓词调用,它们都返回一些 bool 值,但您没有以任何方式连接它们。您想知道列表中的所有元素是否都是字符串,那么哪种 bool 运算符(and
、or
等)最适合这里?
2) (string? (rest lst))
每次都会返回 false,因为 rest
返回一个列表,而不是字符串。要真正使其成为递归函数,您需要使用 lst
的 rest
再次调用 strings-only?
。
总结:
(define (strings-only? lst)
(cond
[(empty? lst) true]
[else (___ (string? (first lst))
(strings-only? (rest lst)))]))
使用此处最有意义的 bool 运算符填写空白。
关于string - 使用 string 检查字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28724824/