Определить, применить в Python:
def apply(f, arg_list):
return f(*arg_list)
Пример схемы:
(define (pythagoras a b)
(sqrt (+ (* a a) (* b b))))
(apply pythagoras '(3 4)) ; Returns: 5
Аналог Python Пример:
import math
def pythagoras(a, b):
return math.sqrt(a**2 + b**2)
apply(pythagoras, [3, 4]) # Returns: 5.0
Дополнительные примечания (исходя из вашего очевидного интереса к таким вещам)
Python eval
:
eval('pythagoras(3, 4)')
Принимая во внимание, что на схеме:
(eval '(pythagoras 3 4))
(eval "Hello")
(eval `(,(if (> x 0) + -) 100 ,(pythagoras 3 4)))
Как видите, Python eval
требует от вас возиться со строками, байтами или «объектами кода». Схема eval
принимает Схему. См .: Что именно означает гомоиконичность?
Возможно, вас заинтересует чтение о Метациркулярный оценщик (из Структура и интерпретация компьютерных программ, глава 4, Metalinguisti c Abstractions), чтобы увидеть значение схем eval
и apply
.
Обратите внимание, что использование eval
в Python крайне не рекомендуется (и если вы действительно необходимо использовать его, рассмотрим ast.literal_eval ). На обоих языках обычно рекомендуется избегать eval
, если ваша проблема может быть решена с помощью других методов.