Как с помощью пары определить, какая из двух функций оценит наибольшее значение? Схема

По сути, это пара, состоящая из двух функций, и код должен использовать вход пары x, чтобы найти наивысшую оценку для x и распечатать эту оценку.
Я получаю сообщение об ошибке:

машина: ожидается нарушение договора: пара? дано: 4

define (max x)
   (lambda (x)     ;I wanted lambda to be the highest suitable function
 (if (> (car x) (cdr x))
        (car x)
        (cdr x))))

 (define one-function (lambda (x) (+ x 1)))
 (define second-function (lambda (x) (+ (* 2 x) 1)))  ;my two functions

((max (cons one-function second-function)) 4)  

person LostSchemer    schedule 06.10.2013    source источник


Ответы (1)


А где вызываются функции? И у вас есть два параметра с именем x, они должны иметь разные имена. Попробуй это:

(define (max f)                     ; you must use a different parameter name
  (lambda (x)
    (if (> ((car f) x) ((cdr f) x)) ; actually call the functions
        ((car f) x)
        ((cdr f) x))))

Теперь все будет работать как положено:

((max (cons one-function second-function)) 4)
=> 9
person Óscar López    schedule 07.10.2013
comment
Я не знал, как вызывать функции, но теперь понимаю, очень ценил Оскара! - person LostSchemer; 07.10.2013