在 Scheme 中使用字符集

Using char-set in Scheme

此函数必须在给定列表中找到 !"#%&'()*,-./:;?@[\]_{} 个字符。如果这些字符至少被找到一次,那么它必须 return 为真。但是我找不到适合这个目标的预定义函数。

(define (is-symbol lst)
  (if (null? (car lst))
  #f
  (if (char-set:punctuation (car lst)) #t
           (is-symbol (cdr lst)))
  ))

(is-symbol '(#\A #\b #\t #\R #\f 3 5 4 7 8 9 #\A #\G #\w #\q $ & ?))

我相信你正在寻找 char-punctuation?:

(define (is-symbol? lst)
  (cond ((null? lst) #f)
        ((char-punctuation? (car lst)) #t)
        (else (is-symbol (cdr lst)))))

或者更简单:

(define (is-symbol? lst)
  (ormap char-punctuation? lst))

您正在使用 char-set:punctuation,它看起来像 SRFI-14。对应的成员谓词是char-set-contains?.