【发布时间】:2021-04-06 21:57:58
【问题描述】:
我是方案新手,正在尝试学习函数。我想创建一个函数,我可以在其中计算参数中原子“a”的所有出现次数。这是我到目前为止所写的。我不确定在第三种情况下该写什么。请帮忙。
(define (count-a arg)
(COND
((null? arg) 0)
((eq? arg 'a) 1)
((list? arg) ( ___ + ( ___ count-a arg)))
(else 0)
))
这是我想要的输出:
(count-a 'a) 1
(count-a 'aa) 0
(count-a '(a)) 1
(count-a '(ab c) 0
(count-a '(a (b c) (c (d a) a) (((a b))))) 5
【问题讨论】:
-
你对第三个条件中的模式有合适的形式有多大信心?
-
一个列表有两个部分,一个头和一个尾。看起来您想计算头部的所有 a,尾部的所有 a,然后将它们相加。但是,您的骨架表达式格式不正确,因为在 Scheme 中您会编写 (+ ....) 并且递归函数调用是 (count-a something),在 count-a 之前没有一个术语
-
@coredump 或者是
( _red..._ + ( _ma.._ count-a arg))。 Scheme中没有尖锐的引用。 :) -
这是作业吗?您希望我们给您答案或提示吗?你了解过高阶函数吗,比如
filter或fold? ------ 还有,(count-a '(a (b c) (c (d a) a) (((a b)))))应该是 4,不是吗? -
@Will Ness 恐怕你是对的 :'(
标签: function functional-programming scheme lisp