gpt4 book ai didi

Scheme Factorial (fact* l) 问题

转载 作者:行者123 更新时间:2023-12-01 12:43:10 25 4
gpt4 key购买 nike

我是 Scheme 的新手,所以请原谅这个问题:我有一个计算数字列表的阶乘的函数,但它在结果中的最后一个数字之前给了我一个句点。我哪里错了?

代码:

#lang scheme

(define fact
(lambda (n)
(cond
((= n 0) 1)
((= n 1) 1)
(else (* n (fact (- n 1)))))))

(define fact*
(lambda (l)
(cond
((null? (cdr l)) (fact (car l)))
(else
(cons (fact (car l)) (fact* (cdr l)))))))

输出:

> (fact* '(3 6 7 2 4 5))
(6 720 5040 2 24 . 120)

最佳答案

您所做的是创建一个 improper list .试试这个:

(define fact*
(lambda (l)
(cond
((null? (cdr l)) (list (fact (car l))))
(else
(cons (fact (car l)) (fact* (cdr l)))))))

在第四行中添加 list 应该可以按预期进行。更好的可能是以下内容:

(define fact*
(lambda (l)
(cond
(null? l) '())
(else
(cons (fact (car l)) (fact* (cdr l)))))))

这允许您的 fact* 函数在空列表上工作,并减少您调用 fact 的地方的数量。

关于Scheme Factorial (fact* l) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1384399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com