Я все еще изучаю ракетку.
Мне нужно вызвать неизвестную функцию.Функция и ее параметры находятся в следующем списке:
(define l1 '((function-name parameter1)
(function-name parameter3)))
Чтобы запустить эту функцию, я делаю:
(first (car l1)) (second (car l1)) another-parameter
Но я получаю ошибку:
application: not a procedure;
expected a procedure that can be applied to arguments
given: 'function-name
arguments...:
Как мне запустить этот function-name
?
ОБНОВЛЕНИЕ:
Я попытался ответить Оскару:
(eval (first (car l1)) (second (car l1)) another-parameter)
И я получил ошибку:
eval: arity mismatch;
the expected number of arguments does not match the given number
given: 3
arguments...:
Я также попытался:
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(eval (first (car l1)) (second (car l1)) another-parameter ns)
И я получаю ту же ошибку:
eval: arity mismatch;
the expected number of arguments does not match the given number
given: 4
arguments...:
Затем я попробовал это:
(eval (list (first (car l1)) (second (car l1)) another-parameter))
И я получаю ошибку:
function-name: unbound identifier;
also, no #%app syntax transformer is bound in: function-name
Наконец, у меня естьпопробовал:
(eval (list (first (car l1)) (second (car l1)) another-parameter) ns)
и я получаю внутреннюю ошибку от function-name
.Но эта функция работает отлично.
function-name
может быть как минимум тремя (или более) функциями, поэтому я не помещал ее здесь раньше.Все они будут иметь два списка в качестве параметров, и они будут возвращать #t или # f.
Один из затем, затем один тест, который сейчас проверяется:
(define match (lambda (list1 list2) ...))
Очевидно, list1
и list2
являются списками.
ОБНОВЛЕНИЕ 2: Я попробовал Минимальный, Полный и проверяемый пример Оскара, и он работает.Но я изменил, чтобы использовать на моем на работе, и это не работает.Посмотрите:
(define function-name
(lambda (list1 list2)
(append list1 list2)))
(define parameter1 '(1 2))
(define parameter3 '(3 4))
(define another-parameter '(5 6))
(define l1 '((function-name parameter1)
(function-name parameter3)))
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(define another-function
(lambda (l1 the-parameter)
(cond
[(eval (list (first (car l1)) (second (car l1)) 'the-parameter) ns) l1])
)
)
(another-function l1 another-parameter)
Я создал another-function
, и он не работает с параметром 'the-parameter
.Он жалуется, говоря:
the-parameter: undefined;
cannot reference an identifier before its definition
Так что проблема в том, что я использую параметр функции в качестве параметра для функции eval
.