Обоснование: я пытаюсь преобразовать крупную библиотеку от Схемы до Python
Есть ли какие-либо хорошие стратегии того, чтобы сделать этот вид преобразования? Конкретно перекрестной парадигмой в этом случае начиная с Python является больше OO, и Схема Функциональна.
Полностью субъективный, таким образом, я делаю это общественной Wiki
Напишите интерпретатор Python на Scheme и напрямую транслируйте свою программу на него :-) Вы можете начать с def
:
(define-syntax def
(syntax-rules ()
((def func-name rest ...)
(define func-name (lambda rest ...)))))
;; test
(def sqr (x) (* x x))
(sqr 2) => 4
Я бы относился к исходной языковой реализации почти как к спецификации требований и написал бы проект на ее основе (что наиболее важно, включая подробные определения интерфейсов как для внешних интерфейсов, так и для интерфейсов между модулями внутри библиотеки). Затем я бы реализовал этот дизайн.
Чего я бы определенно НЕ делал, так это какого-либо преобразования по функциям.
Если у вас нет времени сделать то, что предлагали другие, и фактически повторно реализовать функциональность, нет причин, по которым вы НЕ МОЖЕТЕ реализовать это строго функциональным образом.
Python поддерживает ключевые функции, необходимые для функционального программирования, и вы можете обнаружить, что ваше время лучше потратить на другие дела, особенно если абсолютная оптимизация не требуется. С другой стороны, поиск ошибок может показаться вам довольно сложной задачей.
Я бы установил несколько досок и выписал алгоритмы из кода схемы. Затем я бы реализовал алгоритмы на Python. Затем, как предлагает @PaulHankin, используйте код схемы как способ написания тестовых примеров для проверки кода Python
Используйте реализацию схемы как способ создания тестовых примеров. Я бы написал функцию, которая может вызывать код схемы и читать вывод, конвертируя его обратно в python.
Таким образом, вы можете написать тестовые примеры, которые выглядят следующим образом:
def test_f():
assert_equal(library.f(42), reference_implementation('(f 42)'))
Это не поможет вам переводить библиотеку, но даст вам довольно хорошую уверенность в том, что то, что у вас есть, дает правильные результаты.
Конечно, в зависимости от того, что делает схема, это может быть не так просто ...