分词函数
Function that splits word
我想编写一个函数,将单词拆分为第一个、中间和最后一个字符,并为每个字符创建一个单独的列表。例如:
“代码”一词将拆分为:
(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
作为实际列表部分。
- 只有方案才是真正的循环构造是递归。 named
let
通常用于这种情况。
- 逻辑应该是cons第一个元素然后递归直到找到一个字符串。在那里你计算最后一个元素的索引。然后你
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)
这不是一个制作字符列表的非常有效的过程。在 Scheme 中我们已经有 string->list
产生相同的最终结果。
我想编写一个函数,将单词拆分为第一个、中间和最后一个字符,并为每个字符创建一个单独的列表。例如:
“代码”一词将拆分为:
(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
作为实际列表部分。 - 只有方案才是真正的循环构造是递归。 named
let
通常用于这种情况。 - 逻辑应该是cons第一个元素然后递归直到找到一个字符串。在那里你计算最后一个元素的索引。然后你
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)
这不是一个制作字符列表的非常有效的过程。在 Scheme 中我们已经有 string->list
产生相同的最终结果。