在 Racket 中设置默认参数值
Posted
技术标签:
【中文标题】在 Racket 中设置默认参数值【英文标题】:Setting default argument value in Racket 【发布时间】:2011-10-31 07:05:53 【问题描述】:是否可以为 Racket 中的某些参数设置默认值?
在 Python 中也是如此:
def f(arg=0)
...
【问题讨论】:
【参考方案1】:是的;看看:declaring optional arguments.
例如:
(define (f [arg 0])
(* arg 2))
Racket 还支持带有关键字参数的函数。该链接也应该指向讨论它们的文档。祝你好运!
【讨论】:
顺便说一句,你认为在递归函数中使用可选参数来传递状态是个好主意吗? 有时会适得其反。例如,如果可选参数是某个累加器,那么如果我忘记在某个地方的递归调用中传递累加器,那么,哎呀。 :) wrt 使用可选参数在递归函数中存储状态,我认为这是一个轻微的邪恶,因为你的抽象是泄漏的。我更喜欢这样的内部定义模式: (define (foo a b c) (define (foo a b c state) #|...|#) (foo a b c 'init-state)) 这就是我的想法。但是,该死的,(define (foo a b c [state '()])) 输入起来要容易得多:) 使用代号。 (define (tree-sum t) (let loop ([tt]) (if (tree-node?t) (apply + (map loop (tree-children t)))) (tree-val t)))) 然后您可以将所需的任何状态参数添加到循环函数中,而不会将它们泄漏到树和函数的接口中。 @Halst以上是关于在 Racket 中设置默认参数值的主要内容,如果未能解决你的问题,请参考以下文章