Совет относительно перевода кода с очень несвязанных языков (в этой Схеме случая к Python)?

Обоснование: я пытаюсь преобразовать крупную библиотеку от Схемы до Python

Есть ли какие-либо хорошие стратегии того, чтобы сделать этот вид преобразования? Конкретно перекрестной парадигмой в этом случае начиная с Python является больше OO, и Схема Функциональна.

Полностью субъективный, таким образом, я делаю это общественной Wiki

5
задан Michael 23 May 2010 в 20:29
поделиться

5 ответов

Напишите интерпретатор 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
0
ответ дан 18 December 2019 в 13:11
поделиться

Я бы относился к исходной языковой реализации почти как к спецификации требований и написал бы проект на ее основе (что наиболее важно, включая подробные определения интерфейсов как для внешних интерфейсов, так и для интерфейсов между модулями внутри библиотеки). Затем я бы реализовал этот дизайн.

Чего я бы определенно НЕ делал, так это какого-либо преобразования по функциям.

7
ответ дан 18 December 2019 в 13:11
поделиться

Если у вас нет времени сделать то, что предлагали другие, и фактически повторно реализовать функциональность, нет причин, по которым вы НЕ МОЖЕТЕ реализовать это строго функциональным образом.

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

0
ответ дан 18 December 2019 в 13:11
поделиться

Я бы установил несколько досок и выписал алгоритмы из кода схемы. Затем я бы реализовал алгоритмы на Python. Затем, как предлагает @PaulHankin, используйте код схемы как способ написания тестовых примеров для проверки кода Python

1
ответ дан 18 December 2019 в 13:11
поделиться

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

Таким образом, вы можете написать тестовые примеры, которые выглядят следующим образом:

def test_f():
  assert_equal(library.f(42), reference_implementation('(f 42)'))

Это не поможет вам переводить библиотеку, но даст вам довольно хорошую уверенность в том, что то, что у вас есть, дает правильные результаты.

Конечно, в зависимости от того, что делает схема, это может быть не так просто ...

6
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: