我正在尝试编写一个名为“p”的Scheme函数,其中一个参数X是一个字母列表。如果a的数量小于b的数量,则该函数应返回true。这就是我所拥有的,但不能解决参数错误。非常感谢任何帮助。
#lang scheme
(define p
(lambda (X)
(let ((countA 0))
(let ((countB 0))
(count(countA countB X)
(if (= countA (- countB 1))
#t
#f))))))
(define count
(lambda (A B X)
(if (null? (cdr X))
(car X)
((if (string=? "a" (car X))
((+ A 1) (p(cdr X)))
((if (string=? "b" (car X))
((+ B 1) (p(cdr X)))
(p(cdr X)))))))))
答案 0 :(得分:1)
我打赌这是一个功课。如果不是,这是解决它的惯用方法:
(define (p lst)
(= (count-letters "a" lst)
(- (count-letters "b" lst) 1)))
(define (count-letters letter lst)
(count (lambda (e) (string=? e letter))
lst))
......但是,当然,你应该手动解决它。关于您的代码的一些反馈:
if
let
解决此问题的方式不正确,如果您改变了let
中定义的变量的值,可能可以正常工作,但是我真的怀疑这是在这种情况下编写解决方案的最佳方法count
过程的参数会在count
返回后以某种方式存储结果 - 这是不对的,它不会像那样工作从上面的代码中获取想法来编写自己的解决方案 - 首先,您需要定义不使用count-letters
的{{1}}函数,并且给定的字母,计算它在列表中出现的次数。有了这个程序,编写count
程序非常容易(事实上,你可以在上面讨论我的实现!)。别忘了测试它:
p