Возможно ли определить функцию (+ = сумма суммы) в ракетке? - PullRequest
1 голос
/ 09 июня 2019

Я изучаю функциональное программирование в ракетке, и тест с вопросом сказал:

В Java мы можем увеличить переменную, используя x += 10;

Можем ли мы определить функцию в Racket (+= var amount) с теми же значениями Java?

Я не совсем уверен, но я думаю, нет, потому что я не могу изменить переменную с помощью функции в ракетке.

Как:

(define myvar 10)

(+= myvar 1)

myvar

Я продолжаю получать 10, когда я набираю myvar в консоли drracket

Ответы [ 2 ]

3 голосов
/ 09 июня 2019

В основном x += 5 - это сокращение от x = x + 5 в большинстве языков Алгол.Я уверен, что в Java вы не можете делать то, о чем просите.например.

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

Однако в схеме и ракетке вы можете.Поскольку полная форма (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 голос
/ 09 июня 2019

Вы не можете определить функцию для этого.

Вы можете определить макрос, который расширяется до (set! var (+ var amount)), и это будет сделано!

...