我想编写一个函数,将单词拆分为第一个、中间和最后一个字符,并为每个字符创建一个单独的列表。例如:
“代码”一词将分为:
(list #\c "ode" #\s)
然后
(list #\c #\o "d" #\e #\s)
然后
(list #\c #\o #\d #\e #\s)
所以基本上它需要任何单词,然后分割第一个和最后一个字符,然后重复这个过程,直到每个字符都被转换。有人可以帮我解决这个问题吗?谢谢
我很乐意帮助您。这是我的帮助:
string?
和 char?
string-length
获取长度并使用 string-ref
访问单个字符。+
和 -
计算所需的指数。substring
创建新的中间字符串。car
、cdr
和 cons
作为实际列表部分。let
的情况下经常使用。cons
第一个,cons
新的中间字母,cons新的最后一个字母,列表的其余部分作为最后一个cdr。现在你有一轮了。这是一个迭代的过程,直到遇到一个字符串,然后用另一个字符串替换它。你的内循环看起来很像:
(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)
这不是一个非常有效的创建字符列表的过程。在方案中,我们已经有了
string->list
,它产生相同的最终结果。