Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Scheme中的多字符原子返回元素?_Scheme - Fatal编程技术网

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

如何从Scheme中的多字符原子返回元素?,scheme,Scheme,假设我定义了一个“x”,并给它赋值“Hello”(这是Scheme中的一种原子类型): 有没有办法返回原子的第二个元素,即我想返回字母“e”?当计算'hello时,它是一个名为hello的单态符号。您可以从symbol->string (symbol->string 'hello) ; ==> "hello" (list->string (list #\e)) ; ==> "e" 现在,字符串是字符序列: (string->list "hello") ; ==&

假设我定义了一个“x”,并给它赋值“Hello”(这是Scheme中的一种原子类型):


有没有办法返回原子的第二个元素,即我想返回字母“e”?

当计算
'hello
时,它是一个名为
hello
的单态符号。您可以从
symbol->string

(symbol->string 'hello) ; ==> "hello"
(list->string (list #\e)) ; ==> "e"
现在,字符串是字符序列:

(string->list "hello") ; ==> (#\h #\e #\l #\l #\o)
您可以使用带有参数1(第一个是索引0)的
list ref
或常用的
cxr
来获取第二个字符

(list-ref '(#\h #\e #\l #\l #\o) 1) ; ==> #\e
如果您想要一个包含一个字母的字符串,您需要创建一个包含一个elmenet的列表,并将其从
list->string

(symbol->string 'hello) ; ==> "hello"
(list->string (list #\e)) ; ==> "e"
如果您想要一个只有一个字母的符号,可以使用
string->symbol

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

我不太确定你想要什么,但是如果你把所有的或者其中的一部分拼凑在一起,我敢打赌你可以做你想要的

将整个字符串转换为列表,然后只拾取所需的字符将产生不必要的垃圾进行收集。使用
string ref
更有效:

(string-ref (symbol->string 'Hello) 1) => #\e
如果您需要一个字符串而不是一个字符,就像Sylwester在上面的评论中提到的那样,您可以通过调用
(string)
将其包装成一个字符串。或者:

(substring (symbol->string 'Hello) 1 2) => "e"
使用
(string#\e)
而不是
(list->string(list#\e))