这可以在球拍中定义一个没有参数的函数吗?

时间:2013-11-19 20:59:31

标签: function racket

我正在尝试在Racket中定义一个不带参数的函数。我见过的所有例子都有一个或多个参数。 我怎么能这样做?

3 个答案:

答案 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)