2014-09-29 105 views
0

我有一个像(不失一般性(仅图像可能的语法))一个源文件区分中缀形式语言功能

function a() 
    return g // global variable without any internal structure exactly 
end 

function b(x, y) 
    local z = x * y 
    return z + 1 
end 

function c(z, t) 
    return b(z * z, a()) 
end 

// ...etc 

我想defferentiate任何功能WRT一些变量。

所有正式的参数我们可以视为一个功能与未知在派生时间内部结构。

如果我站在正确进一步,再下面是真相(用于根据符号'是符号的一部分,全局变量是在替补时间操作阶段(DEF:g{g}是其中之一,但g{y}是零)):

function a'() 
    return g'; 
end 

function b'(x, y, x', y') 
    local z' = x' * y + x * y' 
    return z' + 0 
end 

但是如何处理上一个函数呢?即用实际参数代替功能b

是否有任何准备使用通用算法的实现来处理上述问题?如何处理高阶导数(特别有趣,如何处理形式参数)?还有其他可能不明确的案件吗?

+0

@HighPerformanceMark我正在尝试实现上述玩具语言的AST变换器衍生物。 – Orient 2014-09-29 11:09:32

回答

1

我建议让你的参数成为符号表达式,知道如何响应衍生物,并让所有操作接受函数和返回函数。然后你会得到一个知道如何表示为派生词的最终表达式。此外,您可以稍后进行偏导数等事情,因为您拥有符号表达式。

对于我的意思一个真实的例子,看到http://www.elem.com/~btilly/kelly-criterion/js/advanced-math.js为我写来解决在JavaScript中一个微积分问题,并搜索库“优化,如果要求”中的源http://www.elem.com/~btilly/kelly-criterion/betting-returns2.html,看看我是如何使用的。请参阅http://www.elem.com/~btilly/kelly-criterion/了解我为何编写该代码的说明。

在那个例子中,我当然不是从中缀表示法开始工作的。但这是一个标准的解析问题,我认为你知道如何解决。

+0

谢谢。我立即开始探索您提供的链接。 – Orient 2014-09-29 15:46:42