Как игнорировать побочный эффект в Racket при использовании `set!`? - PullRequest
1 голос
/ 01 февраля 2011

В В упражнении 35.4.2 из HtDP я реализовал графический интерфейс и имею кнопку «Удалить», которая вызывает функцию обратного вызова.Вот оно:

(define (cb-remove x)
  ((lambda (name result)
     (cond
       [(number? result) (remove-name name address-book)]
       [else (draw-message msg "Not found")]))
   (string->symbol (text-contents label-name))
   (lookup (string->symbol (text-contents label-name)) address-book)))

Когда я запускаю это, я получаю следующее сообщение: button-callback: result of type <Boolean> expected, your function produced #<set!-result>.Проблема в том, что мне нужно позвонить set!, чтобы изменить адресную книгу.Тем не менее, результат set! равен (void), который нельзя объединить с логическим типом.Как я могу предотвратить эту проблему?Спасибо за понимание.

1 Ответ

2 голосов
/ 01 февраля 2011

Simple:

(begin (set! foo bar) #t)
...