我开始使用一个程序来计算.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))
我想过使用几个与此类似的函数来决定何时开始计数,并使用布尔变量来决定何时停止。我会用syllable-start?
看看我是否遇到一个元音,然后我会更新一些布尔值,当我点击不是元音的东西时停止(辅音,标点符号,标记结尾的东西)音节),重新更新布尔值。我会对句子和单词使用相同的方法。
我正在努力解决这个问题。我是计划的新手,我知道如何使用尾递归,但我对此感到不舒服。
我正在将文件转换为字符列表。像这样:
(define (count-everything filename)
(define textstring(file->string filename))
(define stringlist(string->list textstring))
我基本上只是对如何编写上述函数感到困惑。如何开始迭代。我希望有人能在我搜索想法时给我一些建议。
答案 0 :(得分:0)
忘记“更新”和“迭代”,你应该在参数中传递当前状态以进行递归函数调用。
这是一个应该让你开始的例子 - 它计算列表中奇数和偶数整数的数量,结果是一对:
<!-- SAML 2 NameID Generation -->
<util:list id="shibboleth.SAML2NameIDGenerators">
<ref bean="shibboleth.SAML2TransientGenerator" />
<!-- Uncommenting this bean requires configuration in saml-nameid.properties. -->
<!--
<ref bean="shibboleth.SAML2PersistentGenerator" />
-->
<bean parent="shibboleth.SAML2AttributeSourcedGenerator"
p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
p:attributeSourceIds="#{ {'email'} }" />
</util:list>
注意两种元素的当前计数如何作为参数传递给递归过程(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))
。