Functional programming 如何将列表中的项目转换为球拍中的字符串

Functional programming 如何将列表中的项目转换为球拍中的字符串,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,因此,我有一个从文件创建的项目列表。我能够读取文件并成功地将项目放入列表,但在将这些项目转换/转换为字符串时遇到问题 例如: (print myList) 产生: '(Apple Orange banana pickle) 'Apple'Orange'banana'pickle 以及: 产生: '(Apple Orange banana pickle) 'Apple'Orange'banana'pickle 不是弦 我真的只是想要一个字符串列表,以便以后可以操作它们。Racket文档似

因此,我有一个从文件创建的项目列表。我能够读取文件并成功地将项目放入列表,但在将这些项目转换/转换为字符串时遇到问题

例如:

(print myList)
产生:

'(Apple Orange banana pickle)
'Apple'Orange'banana'pickle
以及:

产生:

'(Apple Orange banana pickle)
'Apple'Orange'banana'pickle
不是弦


我真的只是想要一个字符串列表,以便以后可以操作它们。Racket文档似乎只显示了如何处理char。我该怎么做呢?谢谢你的帮助

我想我找到了答案。我相信我清单上的物品在球拍中被称为“符号”。所以有一个方法“symbol->string”可以使用

因此,我定义了一个名为“stringList”的新列表,并执行了以下操作:

;Create new list to be list of strings
(define stringList '())

;convert symbols from list into strings and add to stringList
(for ([i myList])
  (set! i (symbol->string i))
  (set! stringList (cons i stringList))
)

我仍然希望听到任何反馈

有一种更简单、更惯用的方法,将内置过程与一起使用,可以准确地执行所需的转换:

(map symbol->string '(apple orange banana pickle))
=> '("apple" "orange" "banana" "pickle")
请记住,在Scheme中,大多数情况下我们都避免变异操作,例如
set-Scheme支持函数式编程,即我们构建新数据而不是修改数据


还要注意的是,我们避免显式循环-有内置的程序可以以任何你能想象到的方式操作列表,对于那些罕见的情况,当我们找不到满足我们需要的程序时,我们使用递归进行循环。

我推荐一本初学者的书,如《小Schemer》或《如何设计程序》掌握解决方案中问题的方法。目前,您正在以一种非惯用的方式编写代码,就像使用传统的过程语言一样。请注意,如果希望在不封装的情况下显示数据,
display
是正确的函数。另外,如果您想要这样的东西,那么使用
写入
可能更好。请注意,输出列表中的元素以相反的顺序出现。不要使用
for
来执行此操作,请使用
for/list
(或@ÓscarLópez建议的
map
)<代码>设置几乎从来都不是你想要的。请不要使用
set