假设我定义了一个" x"并为其分配值' Hello(这是Scheme中的原子类型):
(define x 'Hello)
我有什么方法可以归还原子的第二个元素,即我想要回复这封信' e' ?
答案 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
我不确定你想要什么,但是如果你将所有这些或其中一些拼凑在一起,我打赌你可以做出你想要的东西。