替换无用的代码部分

时间:2012-03-28 11:52:28

标签: scheme

我必须实现一个程序,它找到无用的代码部分并用一些更好的代码替换它。我给你举个例子:

;;(define (positive-odd? n)
;;  (if (and (odd? n) (positive? n)) #t #f))

应替换为:

;;(define (positive-odd? n)
;;  (and (odd? n) (positive? n)))

我还有一个包含规则的列表。我将举例说明一条规则,它将帮助我们了解下面的例子:

;;(define redundant-if
;;  '((WHEN (if ?cond #t #f))
;;    (THEN ?cond)))

所以,我必须迭代这个规则列表,并找到规则和我的函数之间的匹配与无用的代码。要做到这一点,我只有一个想法,但我不认为这是一个好的:我从规则列表中采取非常规则,然后我迭代我的函数的主体,并寻找相似之处,当我找到一个,我替换代码。但我认为这样做很难。

请告诉我这个问题的实施情况。

1 个答案:

答案 0 :(得分:2)

我认为您需要的是部分评估;

可以在A Hacker's Introduction to Partial Evaluation

中找到使用重写规则来简化代数表达式的示例