我知道你可以这样写一个简单的阶乘函数:
(define fact
(lambda (n)
(if (= n 0) 1
(* n (fact (- n 1)))))
但是,这只有在您发送号码时才有效;如果您发送列表或符号,它将出错。所以我想做的是让它适用于所有事情,如果是列表,则对列表中的每个单独元素进行阶乘。这是我所拥有的:
(define listFact
(lambda (n)
(cond
((null? n) 1)
((symbol? n) n)
((number? n) (if (= n 0) 1 (* n (listFact (- n 1)))))
((cons? n) (cons (listFact(car n)) (listFact(cdr n)))))))
我不太擅长 Scheme,但我需要能够了解基础知识。除列表外,每个输入都正常工作。
> (listFact '())
1
(listFact 'a)
'一种
(清单事实 4)
24
(listFact '(1 2 3))
缺点:第二个参数必须是一个列表,但收到 6 和 1
我想要最后一个做的是返回:
(清单 1 2 6)
我不知道为什么它不起作用。如果有人能在不改变整个代码结构的情况下帮助我解决这个问题(即不使用应用/映射或多个函数),将不胜感激。我认为唯一搞砸的线路是有缺点的线路。
谢谢。