首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在球拍中定义一个函数(+=变量)吗?

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

Stack Overflow用户
提问于 2019-06-09 05:07:08
回答 2查看 251关注 0票数 1

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

在Java中,我们可以使用x += 10;递增变量

我们能在球拍(+= var amount)中定义一个和Java含义相同的函数吗?

我不是很确定,但我认为不是,因为我不能用球拍中的函数修改变量。

像这样:

代码语言:javascript
复制
(define myvar 10)

(+= myvar 1)

myvar

当我在drracket控制台中输入myvar时,我一直得到10

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-09 06:42:21

在大多数Algol语言中,x += 5基本上都是x = x + 5的缩写。在Java中,我确信你不能做你所要求的事情。例如:

代码语言:javascript
复制
public static void method plusEqual(int binding, int increment) {
  binding = binding + increment;
}

然而,在Scheme和球拍中,你可以做到。因为完整的表单是(set! binding (+ binding argument)),所以我建议使用+set!

代码语言:javascript
复制
(define-syntax +set!
  (syntax-rules ()
    ((_ binding increment)
     (set! binding (+ binding increment)))))

(define test 10)
(+set! test 5)
test ; ==> 15
票数 4
EN

Stack Overflow用户

发布于 2019-06-09 05:10:12

您不能定义函数来执行此操作。

不过,您可以定义一个扩展到(set! var (+ var amount))的宏,这样就可以了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56510145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档