list - 如何从 Racket 中的输入读取行中创建列表

标签 list scheme racket

我想从标准输出中创建一个列表作为列表的输入

(define USER_INPUT  (list (read-line)))

当我输入列表时,我不断收到此错误,因为要输入的列表在 map 过程中使用

map: contract violation
  expected: list?
  given: "10 10 10 10 10 10 10 10 10"

最佳答案

问题在于 (read-line) 生成一个字符串,因此您最终只会得到一个字符串元素的列表。如果您特别想读取数字列表,请在空格上拆分字符串并将所有元素转换为数字。

(map string->number (string-split (read-line)))

另一方面,如果您确实想使用 Racket 语法的全部功能来读取列表,则可以使用 read .

> (read)
(10 10 10)
'(10 10 10)

如果您想指定列表内容但不想包含括号,那么您也可以这样做。

(read (open-input-string (format "(~a)" (read-line))))

关于list - 如何从 Racket 中的输入读取行中创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306783/

相关文章:

python - 将字典的值更改为列表

scheme - PLT-Scheme学习引用

Scheme:什么时候计算let中的表达式?

scheme - 为什么模式变量在宏扩展中也被重命名?

python - 与 Python 中的字典列表关联

python - 我试图组契约(Contract)一对象的两个列表,在 python 中使用不同的字段但相同类型的数据进行排序

list - 如何显示在 Emacs 中 hippie-expand 命令创建的所有可能的补全?

macos - OS X Scheme Language(lisp 方言)

macros - Define 和 let w.r.t. 之间的区别语法规则关键字

macros - Racket 与 Scheme 宏