Recursion 拆分单词的函数
我想写一个函数,将一个单词拆分为第一个、中间和最后一个字符,并为每个字符创建一个单独的列表。例如: “代码”一词可分为:Recursion 拆分单词的函数,recursion,scheme,Recursion,Scheme,我想写一个函数,将一个单词拆分为第一个、中间和最后一个字符,并为每个字符创建一个单独的列表。例如: “代码”一词可分为: (list #\c "ode" #\s) 然后 然后 所以基本上,它接受任何单词,然后分割第一个和最后一个字符,然后重复这个过程,直到每个字符都被转换。有人能帮我吗?谢谢我很乐意帮你做这件事。以下是我的帮助: 您可以使用string?和char? 字符串是字符的向量。您可以使用string length获取长度,并使用string ref访问单个字符
(list #\c "ode" #\s)
然后
然后
所以基本上,它接受任何单词,然后分割第一个和最后一个字符,然后重复这个过程,直到每个字符都被转换。有人能帮我吗?谢谢我很乐意帮你做这件事。以下是我的帮助:
- 您可以使用
和string?
char?
- 字符串是字符的向量。您可以使用
获取长度,并使用string length
访问单个字符string ref
- 字符串和向量都是零索引的,就像所有好的语言一样。使用
和+
计算所需的索引-
- 使用
创建新的中间字符串substring
- 对于实际列出的零件,可以使用
、car
和cdr
cons
- 方案唯一的实循环构造是递归。命名的
通常用于此类情况let
- 逻辑应该是cons第一个元素nd递归,直到找到字符串为止。在这里,您可以计算最后一个元素的索引。然后,您将
第一个,cons
新中间,cons新的最后一个字母,列表的其余部分作为最后一个cdr。你现在有一轮了cons
- 如果希望在列表中不再包含字符串之前执行此操作,则需要一个外部循环。内部循环需要知道,如果最终得到的是空列表,该怎么办
(define (replace-first-string lst replacement)
(let helper ((lst lst))
(cond ((null? lst) '())
((string? (car lst)) (cons replacement (cdr lst)))
(else (cons (car lst) (helper (cdr lst)))))))
(replace-first-string (list #\c "ode" #\s) "here")
; ==> (#\c "here" #\s)
这不是一个制作字符列表的非常有效的过程。在Scheme中,我们已经有了产生相同最终结果的
string->list
。您使用的是哪种方案?@Shawn我使用RacketThanks作为提示,但我也想知道如何按照问题中提到的顺序转换字符串:第一个和最后一个字符,然后将中间的字符转换为另一个单词,然后将这个单词分成第一个和最后一个字符,然后重复。@Badajoz我添加了一个迭代器示例。这应该足以解决您的问题。谢谢!谢谢你的帮助
(list #\c \o #\d #\e #\s)
(define (replace-first-string lst replacement)
(let helper ((lst lst))
(cond ((null? lst) '())
((string? (car lst)) (cons replacement (cdr lst)))
(else (cons (car lst) (helper (cdr lst)))))))
(replace-first-string (list #\c "ode" #\s) "here")
; ==> (#\c "here" #\s)