我正在写一个用于从javascript代码生成php检查的小工具,我想知道是否有人知道将函数代码转换为命令式代码的标准方式?是否有将功能代码转换为命令代码的标准方式?
我发现本文:Defunctionalization at Work它解释了非常好的功能。
Lambdalifting和defunctionalization有些回答了这个问题,但是对于数据结构呢,我们仍然在解析列表,就像它们都是链表一样。有没有办法将函数式语言的链表转换成其他高级数据结构,如C++向量或java数组列表?
我正在写一个用于从javascript代码生成php检查的小工具,我想知道是否有人知道将函数代码转换为命令式代码的标准方式?是否有将功能代码转换为命令代码的标准方式?
我发现本文:Defunctionalization at Work它解释了非常好的功能。
Lambdalifting和defunctionalization有些回答了这个问题,但是对于数据结构呢,我们仍然在解析列表,就像它们都是链表一样。有没有办法将函数式语言的链表转换成其他高级数据结构,如C++向量或java数组列表?
这里有一些补充@Artyom名单:
y = f x
可以与x := f x
替换如果x是线性的,并具有相同的类型y
不,没有。
原因是没有像functional code
或imperative code
这样的具体和明确的东西。
这样的转换只存在于抽象的具体实例中:例如,Haskell代码转换为LLVM字节代码,F#代码转换为CLI字节代码或将Frege代码转换为Java代码。
(如果有一个从Javascript到PHP我怀疑。)
取决于你所需要的东西。通常的答案是“没有这样的工具”,因为结果将不可用。不过从这个角度来看这个:
计算机中的汇编程序指令集定义了一个命令式机器。因此编译器需要做这样的翻译。不过,我认为你不想拥有汇编代码,但是更具可读性。
通常,这些繁重的程序转换是手动完成的,如果对结果感兴趣,或者如果结果永远不会被人看到,则自动完成。
也许你有兴趣去除一些语言元素(比如高阶函数)吧?
为了消除程序中的HOF,有一些技术,如去官能化。为了移除闭包,你可以使用lambda-lifting(又名闭包转换)。这是你感兴趣的东西吗?
我认为您需要提供具体的代码示例以及您打算生成的目标代码,以便其他人可以提出解决方案。
加了:
会不会有变换功能的语言的linkedlists成其他高级别数据结构,如C++载体或Java的ArrayList的方法吗?
是的。链表使用C++中的指针表示(一个结构“节点”有两个字段:一个用于“有效载荷”,另一个用于“下一个”指针;空列表然后表示为NULL指针,但有时候人们更喜欢使用特殊“哨兵值”)。请注意,如果源语言中的代码不依赖单个链接列表的表示(在源语言实现中),还可以使用目标语言中的矢量实现“cons”/“nil”操作(而不是当然,如果这符合你的需求,但)。这里的想法是为熟悉的操作提供替代实现。
这被称为“编译”,并且有几十种不同的技术。从这里开始:http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/ –