可以在球拍中定义一个函数(+ =可变数量)吗?

时间:2019-06-08 21:07:07

标签: scheme racket

我正在研究球拍中的函数式编程,一个问题测试说:

在Java中,我们可以使用x += 10;

来增加变量

我们可以在拍子(+= var amount)中定义具有与Java相同含义的函数吗?

我不确定,但我认为不可以,因为我无法使用球拍中的函数修改变量。

赞:

(define myvar 10)

(+= myvar 1)

myvar

当我在drracket控制台中输入myvar时,我将继续获得10分

2 个答案:

答案 0 :(得分:3)

在大多数Algol语言中,x += 5基本上是x = x + 5的缩写。在Java中,我确定您无法满足您的要求。例如。

public static void method plusEqual(int binding, int increment) {
  binding = binding + increment;
}

但是在Scheme和Racket中,您可以。由于完整格式为(set! binding (+ binding argument)),因此我建议使用+set!

(define-syntax +set!
  (syntax-rules ()
    ((_ binding increment)
     (set! binding (+ binding increment)))))

(define test 10)
(+set! test 5)
test ; ==> 15

答案 1 :(得分:1)

您无法定义执行此操作的功能。

您可以定义一个宏,但是该宏可以扩展为(set! var (+ var amount)),就可以了!