如何判断变量是否是Scheme中的字母?

jQw*_*rdy 1 scheme racket

对于真正使用方案的人来说,简单的问题,简单的答案。如何确定变量是否是字母表中的字母?

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

编辑:

我怎样才能做出看起来像这样的东西:(somFunction-isALetter?a)返回:#t

其中 a 不是变量。

Pau*_*fer 5

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

(define (letter? x) (and (char? x) (char-alphabetic? x)))
Run Code Online (Sandbox Code Playgroud)


Ósc*_*pez 5

使用char-alphabetic?此过程。从文档中:

\n\n
\n

char-alphabetic?如果 char 具有 Unicode \xe2\x80\x9cAlphabetic\xe2\x80\x9d 属性,则返回 #t。

\n
\n\n

像这样使用它:

\n\n
(char-alphabetic? #\\a)\n> #t\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果字符在变量中:

\n\n
(define x #\\a)\n(char-alphabetic? x)\n#t\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

更新:

\n\n

重新阅读问题我相信我误解了它。如果您有兴趣找出变量的名称是否只是一个字母,则可以使用以下方法:

\n\n
(define (is-variable-a-letter? x)\n  (let ((var (string->list (symbol->string x))))\n    (and (= (length var) 1)\n         (char-alphabetic? (car var)))))\n\n(is-variable-a-letter? \'x)\n> #t\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n