gpt4 book ai didi

scheme - 方案中的可选参数和点

转载 作者:行者123 更新时间:2023-12-04 14:51:54 26 4
gpt4 key购买 nike

所以,我想看看可以接受任意数量参数的函数是如何工作的?

我试过这个

(define (plus x . xs)
(if
(null? xs) x
(plus (+ x (car xs)) . (cdr xs))))
(plus 1 2 3 4)

但似乎它实际上并没有将 cdr 应用于 xs,而是在我在调试器中逐步执行时传递 ( ( (2 3 4)) 。所以我试过这个
(define (plus* x . xs)
(if
(null? xs) x
(let ((h (car xs))
(t (crd xs)))
(plus* (+ x h) . t))))

思考:“哈,我想看看你现在通过 cdr”,但我收到一个错误:“应用程序:语法错误(非法使用‘.’):(plus* (+ x h) . t)”

到底是怎么回事?

(我可以通过
(define (add . xs)
(foldl + 0 xs))

甚至
(define (plus x . xs)
(if
(null? xs) x
(apply plus (cons (+ x (car xs)) (cdr xs)))))

所以,添加不是问题,点的东西是如何工作的。)

最佳答案

您的最新版本是将数字列表作为输入传递给 plus 的正确方法。 -- 您必须使用 apply去做这个。 (好吧,要么那样,要么像您对 foldl 所做的那样避免整个事情。)在应用程序中使用点并没有做您认为应该做的事情——它使程序的阅读方式有所不同。

关于scheme - 方案中的可选参数和点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181353/

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