我正在尝试在Racket中定义一个不带参数的函数。我见过的所有例子都有一个或多个参数。 我怎么能这样做?
答案 0 :(得分:7)
(define (fun1)
"hello")
(define fun2
(lambda ()
"world"))
(define fun3
(thunk
"I am back"))
(fun1)
=> "hello"
(fun2)
=> "world"
(fun3)
=> "I am back"
修改强>
如果像@Joshua建议的那样,你想要一个可以接受任何参数并忽略它们的过程,那么等价的定义将是:
(define (fun1 . x)
"hello")
(define fun2
(lambda x
"world"))
(define fun3
(thunk*
"I am back"))
(fun1)
(fun1 1 2 3)
=> "hello"
(fun 2)
(fun2 4 5 6 7)
=> "world"
(fun3)
(fun3 8 9)
=> "I am back"
答案 1 :(得分:2)
答案可以在HtDP 2e中找到:
http://www.ccs.neu.edu/home/matthias/HtDP2e/part_one.html#%28part._sec~3afuncs%29
" ...以下是一些愚蠢的例子:
(define (f x) 1)
(define (g x y) (+ 1 1))
(define (h x y z) (+ (* 2 2) 3))"
......然后......>
"这些例子很愚蠢,因为函数内部的表达式不涉及变量。由于变量是关于输入的,因此在表达式中不提及它们意味着函数的输出与其输入无关。 如果输出始终相同,我们不需要编写函数或程序。" (强调我的)
这就是你的问题的答案:你不需要定义无参数函数,只需将它们定义为常量。
所以而不是:
(define (fun) "hello")
你只需要:
(define not-a-fun "hello")
答案 2 :(得分:0)
你可以简单地说
(define (hello-world)
(displayln "Hello world"))
(hello-world)