分词函数

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创建新的中间字符串。
  • 您使用 carcdrcons 作为实际列表部分。
  • 只有方案才是真正的循环构造是递归。 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 产生相同的最终结果。