如何确定变量是否为Scheme中的字母?

时间:2012-10-14 02:09:28

标签: scheme racket

简单的问题,对于实际使用方案的人来说简单的答案。如何判断变量是否是字母表中的字母?

我认为它是这样的(字母?x),其中x是某种不定型。谁能告诉我可以使用什么布尔函数?

编辑:

我怎么能做出这样的东西:(somFunction-isALetter?a) 回归:#t

a不是变量。

2 个答案:

答案 0 :(得分:4)

在Racket中,char-alphabetic?函数仅将字符作为参数,但很容易定义一个函数,该函数对所有非字符返回false而不是失败:

(define (letter? x) (and (char? x) (char-alphabetic? x)))

答案 1 :(得分:4)

使用char-alphabetic?程序。来自documentation

  如果char具有Unicode“字母”属性,则

char-alphabetic?返回#t。

像这样使用:

(char-alphabetic? #\a)
> #t

如果角色在变量中:

(define x #\a)
(char-alphabetic? x)
#t

请注意,char-alphabetic?仅适用于字符

<强>更新

重新阅读我认为我误解了它的问题。如果您有兴趣了解变量的名称是否只是一个字母,那么这将有效:

(define (is-variable-a-letter? x)
  (let ((var (string->list (symbol->string x))))
    (and (= (length var) 1)
         (char-alphabetic? (car var)))))

(is-variable-a-letter? 'x)
> #t

另一方面,如果您对变量的实际内容感兴趣,请应用此答案的第一部分。