List 在计算scheme中的音节、句子和单词时,只在一个巨大的列表上迭代一次

List 在计算scheme中的音节、句子和单词时,只在一个巨大的列表上迭代一次,list,recursion,scheme,List,Recursion,Scheme,我在开始一个计算.txt中句子、单词和音节数量的程序时遇到了一些问题。文件 基本上,我只想在列表中迭代一次,在此期间我计算所有内容,然后在最后输出所有内容。我不想重复三次,每个类别(句子、单词、音节)一次 我有一个好主意如何定义我要找的东西 例如,下面是我检查音节的方法: (define (vowel? letter) (member? letter '(#\A #\E #\I #\O #\U #\Y #\a #\e #\i #\o #\u #\y))) (define (punctuat

我在开始一个计算.txt中句子、单词和音节数量的程序时遇到了一些问题。文件

基本上,我只想在列表中迭代一次,在此期间我计算所有内容,然后在最后输出所有内容。我不想重复三次,每个类别(句子、单词、音节)一次

我有一个好主意如何定义我要找的东西

例如,下面是我检查音节的方法:

(define (vowel? letter)
  (member? letter '(#\A #\E #\I #\O #\U #\Y #\a #\e #\i #\o #\u #\y)))

(define (punctuation-mark? letter)
  (member? letter '(#\? #\. #\: #\; #\!)))

(define (syllable-start? character)
  (vowel? character))
我考虑过使用几个类似的函数来决定何时开始计数,使用布尔变量来决定何时停止计数。我会使用
音节开始?
来查看是否遇到元音,然后我会更新一些布尔值,当我碰到非元音的东西(辅音、标点符号、标记音节结尾的东西)时停止,重新更新布尔值。我会对句子和单词使用同样的方法

不过,我正在努力进行迭代。我对scheme是新手,我知道如何使用尾部递归,但我对它感到不舒服

我正在将文件转换为字符列表。像这样:

(define (count-everything filename)
  (define textstring(file->string filename))
  (define stringlist(string->list textstring))
我基本上只是对如何编写上面的函数感到困惑。如何开始迭代。我希望有人能在我寻找想法时给我一些建议

忘记“更新”和“迭代”,应该在递归函数调用的参数中传递当前状态

下面是一个应该让您开始学习的示例-它计算列表中奇数和偶数整数的数量,其结果是一对:

(define (odds-evens ls)
  (define (count l odds evens)
    (cond ((null? l) (cons odds evens))
          ((odd? (car l)) (count (cdr l) (+ 1 odds) evens))
          (#t             (count (cdr l) odds (+ 1 evens)))))
  (count ls 0 0))
注意这两种元素的当前计数是如何作为参数传递给递归过程
count