2014-04-06 2 views
0

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

Я добрался до точки, где мне нужно выполнить случайно сгенерированную функцию со всеми возможными параметрами в диапазоне (используя карту). «Функция» - это список '(* (+ 1 x) (- x (* 2 3))).

Как я могу выполнить его с заданным параметром? (например, x = 2). Кстати, сгенерированная функция имеет максимум 1 параметр (это x или none).

Спасибо!

ответ

1

Вот мое решение: использование

(define (execute expr) 
    (lambda (x) 
    (let recur ((expr expr)) 
     (case expr 
     ((x) x) 
     ((+) +) 
     ((-) -) 
     ((*) *) 
     ((/) /) 
     (else 
     (if (list? expr) 
      (apply (recur (car expr)) (map recur (cdr expr))) 
      expr)))))) 

Пример:

> (define foo (execute '(* (+ 1 x) (- x (* 2 3))))) 
> (foo 42) 
=> 1548 
+1

Большое спасибо! Ты спасатель жизни! –

Смежные вопросы