Решение упражнения 1.4 из SICP
Итак, нам предлагают код процедуры:
(define (a-plus-abs-b a b) ((if (> b 0) + -) a b))
Работает она очень просто и естественно (особенно если не вспоминать об ограничениях многих императивных языков). Так как операции + и - являются такими же полноправными членами языка, как и переменные, мы можем включать их в любые языковые конструкции. В данном случае мы над a и b выполням сложение, если b положительно и вычитание в противном случае. Нетрудно видеть, что это эквивалентно сложению a с модулем b.
Comments
Comment from ikuchmin
Date: October 24, 2010, 1:59 pm
На самом деле, операция не делает сложение с модулем b, возмите в качестве примера (a-plus-abs-b 2 -1).
Write a comment