使用字符串检查字符串列表?
Check list for strings using string?
您好,我在测试列表以查看列表是否仅包含字符串时遇到了一些问题。我正在阅读文档 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"))
弹出测试错误。我觉得问题在于我尝试使用 first/rest 遍历列表的方式。如有任何想法,我们将不胜感激。
检查您的 else
子句:
[else (string? (first lst))
(string? (rest lst))]
1) 你有两个谓词调用都 return 一些布尔值,但你没有以任何方式连接它们。您想知道列表中的 所有 元素是否都是字符串,那么什么布尔运算符(and
、or
等)最适合这里?
2) (string? (rest lst))
每次都会 return false,因为 rest
return 是一个列表,而不是字符串。要真正使它成为递归函数,您需要使用 lst
.
的 rest
再次调用 strings-only?
总结:
(define (strings-only? lst)
(cond
[(empty? lst) true]
[else (___ (string? (first lst))
(strings-only? (rest lst)))]))
用此处最有意义的布尔运算符填空。
您可以使用内置的 andmap 函数来完成此操作
(define (strings-only? lst)
(andmap string? lst))
您好,我在测试列表以查看列表是否仅包含字符串时遇到了一些问题。我正在阅读文档 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"))
弹出测试错误。我觉得问题在于我尝试使用 first/rest 遍历列表的方式。如有任何想法,我们将不胜感激。
检查您的 else
子句:
[else (string? (first lst))
(string? (rest lst))]
1) 你有两个谓词调用都 return 一些布尔值,但你没有以任何方式连接它们。您想知道列表中的 所有 元素是否都是字符串,那么什么布尔运算符(and
、or
等)最适合这里?
2) (string? (rest lst))
每次都会 return false,因为 rest
return 是一个列表,而不是字符串。要真正使它成为递归函数,您需要使用 lst
.
rest
再次调用 strings-only?
总结:
(define (strings-only? lst)
(cond
[(empty? lst) true]
[else (___ (string? (first lst))
(strings-only? (rest lst)))]))
用此处最有意义的布尔运算符填空。
您可以使用内置的 andmap 函数来完成此操作
(define (strings-only? lst)
(andmap string? lst))