string - 为什么字符串不是方案/ Racket 中的字符列表?

标签 string scheme lisp racket

我习惯的是,字符串只是一个列表或字符数组,就像在大多数类 C 语言中一样。但是,在我使用的方案实现中,包括 Chicken 和 Racket,字符串与字符列表不同。像 (car "mystring") 这样的东西是不会飞的。相反,有一些函数可以从列表转换到列表。为什么做出这个选择?在我看来,Haskell 以最好的方式做到了这一点,字符列表和字符串之间在任何方面都没有任何区别。我最喜欢这个,因为它以最清晰、最简单的方式传达了字符串的含义。我不完全确定,但我猜想在“背景”字符串中几乎是任何语言的列表或字符数组。我特别期待一种像 scheme 这样专注于简单性的语言以这种方式处理字符串,或者至少 make 这样你就可以像处理列表一样处理字符串,比如乘坐 carcdr 我错过了什么?

最佳答案

看起来您真正要问的是,为什么没有同时适用于字符串和列表的通用操作?

那些确实存在,在像 generic collections 这样的库中图书馆。

#lang racket/base
(require data/collection)
(first '(my list)) ; 'my
(first "mystring") ; #\m

此外,像 map 这样的操作来自该库的内容可以与多种不同类型的集合一起使用。

#lang racket/base
(require data/collection)
(define (digit->char n)
  (first (string->immutable-string (number->string n))))
(first (map string (map digit->char '(1 2 3)) "abc"))
; "1a"

这并不意味着字符串是列表,但它确实意味着字符串和列表都是序列,并且对序列的操作可以同时作用于两种数据类型。

关于string - 为什么字符串不是方案/ Racket 中的字符列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34927625/

相关文章:

方案:评估逻辑表达式列表

没有换行符的 PHP 长字符串

java - 有没有办法在不使用java中任何内置函数的情况下找到字符串长度?

string - 在 go 中迭代 2 个字符串

list - 使用递归将原子列表转换为单个列表

lisp - 如何从 Lisp 类导出槽和访问器?

python - 用字母替换数字并提供所有排列

java - 在 clojure 中, (= 'a ' a) 指的是 'same atom' 吗?

scheme - 如何在Scheme中获取整数中的单个数字

lisp - `control strings` 的清晰列表在哪里?使用 Lisp+Slime 时,很难找到关于 `format` 函数的 Hyperspec 文档