如何从Scheme中的多字符原子返回一个元素?

时间:2014-11-10 23:58:13

标签: scheme

假设我定义了一个" x"并为其分配值' Hello(这是Scheme中的原子类型):

(define x 'Hello)

我有什么方法可以归还原子的第二个元素,即我想要回复这封信' e' ?

2 个答案:

答案 0 :(得分:1)

将整个字符串转换为列表,然后只选择所需的字符会产生不必要的垃圾。使用string-ref

效率更高
(string-ref (symbol->string 'Hello) 1) => #\e

如果您需要字符串而不是字符,就像Sylwester在上面的评论中提到的那样,您可以通过将其包装到(string)的调用中将其转换为字符串。可替换地:

(substring (symbol->string 'Hello) 1 2) => "e"

答案 1 :(得分:0)

评估'hello时,它是一个名为hello的单例符号。您可以从symbol->string

获取字符串表示
(symbol->string 'hello) ; ==> "hello"

现在字符串是一系列字符:

(string->list "hello") ; ==> (#\h #\e #\l #\l #\o)

您可以使用list-ref使用参数1(第一个是索引0)或通常的cxr来获取第二个字符。

(list-ref '(#\h #\e #\l #\l #\o) 1) ; ==> #\e

如果你想要一个包含一个字母的字符串,你需要制作一个包含一个elmenet的列表并将其转换为list->string

(list->string (list #\e)) ; ==> "e"

如果您想要一个只有一个字母的符号,请使用string->symbol

(string->symbol "e") ; ==> e

我不确定你想要什么,但是如果你将所有这些或其中一些拼凑在一起,我打赌你可以做出你想要的东西。