我正在学习球拍中的函数式编程,一个问题测试说:
在Java中,我们可以使用x += 10;递增变量
我们能在球拍(+= var amount)中定义一个和Java含义相同的函数吗?
我不是很确定,但我认为不是,因为我不能用球拍中的函数修改变量。
像这样:
(define myvar 10)
(+= myvar 1)
myvar当我在drracket控制台中输入myvar时,我一直得到10
发布于 2019-06-09 06:42:21
在大多数Algol语言中,x += 5基本上都是x = x + 5的缩写。在Java中,我确信你不能做你所要求的事情。例如:
public static void method plusEqual(int binding, int increment) {
binding = binding + increment;
}然而,在Scheme和球拍中,你可以做到。因为完整的表单是(set! binding (+ binding argument)),所以我建议使用+set!
(define-syntax +set!
(syntax-rules ()
((_ binding increment)
(set! binding (+ binding increment)))))
(define test 10)
(+set! test 5)
test ; ==> 15发布于 2019-06-09 05:10:12
您不能定义函数来执行此操作。
不过,您可以定义一个扩展到(set! var (+ var amount))的宏,这样就可以了!
https://stackoverflow.com/questions/56510145
复制相似问题