在 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 中设置默认参数值的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中设置函数参数的默认值

在构造函数中设置默认参数?语法[关闭]

在 node.js 中的 HTTP GET 中设置 URL 参数的默认值

Golang中设置函数默认参数的优雅实现

我可以从以前的参数中设置默认参数吗?

如何在 AngularJS 指令范围中设置默认值?