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

标签 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"))

它弹出测试是错误的。我觉得问题出在我尝试使用第一个/其余部分迭代列表的方式。任何想法将不胜感激。

最佳答案

检查您的 else 子句:

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

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

2) (string? (rest lst)) 每次都会返回 false,因为 rest 返回一个列表,而不是字符串。要真正使其成为递归函数,您需要使用 lstrest 再次调用 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/

相关文章:

python - Python 中的随机字母测试每三次只能工作一次

有人可以帮我弄清楚为什么 VS Code 拒绝承认 getline 作为函数吗?

list - 如何在 Lisp 中创建列表的子列表?

lisp - 如何在 Common Lisp 中创建双向二进制流?

方案 - 字符串追加两个字符串列表

java - 如何使用java验证字符串

mysql - 如何用 MySQL 中另一个字符串和一个字段的串联替换任何字符串

emacs - 如何在 emacs 次要模式下设置评论开始和评论结束?

types - Typed Racket Polymorphic Function 无法应用

scheme - Racket中 “map”的定义是什么