推理:我正试图将一个大型库从Scheme转换为Python
做这种转换有什么好的策略吗?特别是在这种情况下,因为Python是更面向对象的,Scheme是功能性的。
完全是主观的,所以我把它做成了社区维基
在Scheme中编写一个Python解释器,并直接将您的程序翻译为:-)您可以从 def :
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建议的那样,使用Scheme代码作为编写测试用例的方法来测试Python代码
使用方案实现作为生成测试用例的方法。我编写了一个函数,可以调用scheme代码,读取输出,并将其转换回python。
这样,您可以编写如下所示的测试用例:
def test_f(): assert_equal(library.f(42), reference_implementation('(f 42)'))
这并不能帮你翻译这个库,但它会给你很好的信心,让你相信你所拥有的东西会产生正确的结果。
当然,这取决于这个计划的作用,它可能并没有这么简单。。。
我将把原始语言实现看作是一个需求规范,并基于它编写一个设计(最重要的是包括详细的接口定义,包括外部接口和库中模块之间的接口定义)。然后我会从这个设计中实现。
我绝对不会做任何一种逐项翻译。