读取字符串并使用scheme计算元音数
编写一个名为count_元音的过程,计算任意给定字符串中的元音数(a、e、i、o、u) 到目前为止,我有这个读取字符串并使用scheme计算元音数,scheme,racket,Scheme,Racket,编写一个名为count_元音的过程,计算任意给定字符串中的元音数(a、e、i、o、u) 到目前为止,我有这个 (define (count_vowel (str) (char-set-fold (count_vowel (ch i) (if (vowel? ch) (+ i 1) i)) 0 str)) 但是我得到了这个错误。。。 “#%plain lambda:不是:(str)中的标识符” 我需要使用带有R5RS的DrRacket作为语言。试试这个: (d
(define (count_vowel (str)
(char-set-fold (count_vowel (ch i) (if (vowel? ch) (+ i 1) i)) 0 str))
但是我得到了这个错误。。。
“#%plain lambda:不是:(str)中的标识符”
我需要使用带有R5RS的DrRacket作为语言。试试这个:
(define (count-vowel str)
(char-set-fold (lambda (ch i)
(if (vowel? ch)
(+ i 1)
i))
0 (string->char-set str)))
您的
定义
错误
应该是:
(define (count_vowel str)
.... )
在原始解决方案中,请注意第二行的缩进是错误的。每当缩进错误时,就表明某个地方有括号错误。其他答案指出了确切的错误 由于
char set fold
是一个srfi函数,我认为这是一个纯粹的R5RS解决方案
这是正常的。我错误地认为,filter
是R5R的一部分,因此
下面是一个简短的解决方案。原来,过滤器
不是R5RS的一部分
#lang r5rs
(define vowels (string->list "aeiouyæøå"))
(define (vowel? c)
(member c vowels))
(define (filter p xs)
(define (more) (filter p (cdr xs)))
(cond
((null? xs) '())
((p (car xs)) (cons (car xs) (more)))
(else (more))))
(define (count-vowels s)
(length (filter vowel? (string->list s))))
(display (count-vowels "foobarbaz"))
(newline)
我会把最后一个参数放在一个换行符上以保持一致:)好的,这是有意义的,那么为什么我不能再次调用(count_元音“”)函数来测试另一个工作呢?它告诉我它是未定义的;无法引用未定义的标识符?当我这样做(显示(计数元音“code”))时它会工作,因此为了检查另一个字符串,我需要进行显示?我在名称
计数元音中使用了-
而不是。在REPL中,您只需编写(count votels“”)
,但如果将其放入程序中,则#lang r5rs
不会自动打印结果。这就是我插入显式显示的原因。