Я работаю над школьным проектом, связанным с генетическими алгоритмами. Мне нужно создать алгоритм аппроксимации, где я создаю случайные лямбда-выражения, чтобы приблизить правильное значение, до сих пор я могу создавать случайные лямбда-выражения, благодаря примеру, который мне предоставили, однако я зациклен на том, как их запускать , вот мой код:Как я могу генерировать и запускать случайные лямбда-выражения?
#lang racket
(define operators '(+ *))
(define operands '(a b x y))
(define element
(lambda (L)
(list-ref L (random (length L)))))
(define expression
(lambda (n)
(cond ((zero? n) (element operands))
(else
(list
(element operators)
(expression (random n))
(expression (random n)))
))))
;Generates lambda expression
;n is the amount of expressions
;p is the depth of each expression
;Examples below
(define generate
(lambda (n p)
(if (zero? n) empty
(cons
(list 'λ '(x y) (expression p))
(generate (- n 1) p))
)))
(generate 1 1)
'((λ (x y) (* b y)))
(generate 1 3)
'((λ (x y) (* (* y y) (* y y))))
(generate 2 1)
'((λ (x y) (+ b x)) (λ (x y) (+ b x)))
(generate 2 3)
'((λ (x y) (+ (+ a y) a)) (λ (x y) (* (+ (+ y y) (* a a)) (+ (+ y x) a))))
Каждое из этих генерируемых выражений является случайным и является приблизительным значением для правильного значения. Как я могу запустить эти сгенерированные выражения, если они являются списками?
Try '(Eval (автомобиль (генерировать-3)))', чтобы превратить первую лямбду в реальную лямбду, что вы можете назвать в качестве функции. –
@ ThrowawayAccount3Million Да, это правильно, мне нужно использовать _eval_ и отправить параметр _namespace_. – Riccardo
Итак, каков был ваш вопрос? Вот как вы запускаете выражения. –