Search code examples
schemelisp

Scheme define a lambda


I have the following function to compute the sum from A to B of a function in scheme:

(define (SUM summation-function A increment-function B)
  (if (> A B)
      0
      (+ (summation-function A)
         (SUM
           summation-function (increment-function A) increment-function B))))

Currently I define two procedures before calling the function, for example:

(define (self x) x)     ; do nothing, just sum itself
(define (inc x) (+ x 1)); normal +1 increment
(SUM self 0 inc 5)

How instead could I just define the procedure in the call itself, for example:

; in pseudocode
(SUM, lambda x: x, 0, lambda x: (+ x 1), 5)

Solution

  • Typically, we'd use lambdas like this:

    (SUM (lambda (x) x) 0 (lambda (x) (+ x 1)) 5)
    

    For the above example in particular, some Scheme interpreters already provide built-in procedures that do precisely what you want and we can simply say:

    (SUM identity 0 add1 5)