我的老师已经给了课堂一些样本考试题目(课程基本上是关于Scheme(球拍)和lambda演算),我遇到了以下问题:
定义
(β-reduce e)
,这样,当可以进行β减少时(即,当e
具有((λ v e1) e2)
形式时,并且没有阻止β减少的自由变量冲突并且首先需要一些α重命名,它返回β减少的结果。否则,它返回#f
。
示例:
(β-reduce '((λ x (((λ x (x y)) x) (x b))) z)) ⇒ (((λ x (x y)) z) (z b))
(β-reduce '((λ x (((λ y (x y)) x) (x b))) y)) ⇒ #f
我没有走得太远(至少可以说)。我开始认为我应该寻找((λ x (x)) y)
形式的内容,就像我需要进行beta缩减时一样,但我仍然不知道如何用y
替换内部表达式如果有更多的子表达式,则在其内部递归。另外,我真的不确定何时会返回#f
。
这就是我所拥有的:
(define beta-reduce
(lambda (e)
(cond
((and (equal? 'lambda (caar e)) (symbol? (last e)))
replace inner bound variable and recurse ))))
如果有人能帮助我深究这一点,我将非常感激!
答案 0 :(得分:3)
这不是一个完整的答案,而是试图让你开始。
您需要在var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid','ui.grid.edit',
'ui.grid.selection',
'ui.grid.rowEdit', 'ui.grid.cellNav']);
app.controller('MainCtrl', function($scope) {
$scope.gridOptions = {
enableSorting: true,
columnDefs: [
{ field: 'A' },
{ field: 'B' },
{ field: 'C', enableSorting: false }
],
onRegisterApi: function( gridApi ) {
$scope.gridApi = gridApi;
}
};
$scope.gridOptions.data = [{'A':'a1', 'B':'b1', 'C':'c1'}, {'A':'a3', 'B':'b3', 'C':'c3'}, {'A':'a2', 'B':'b2', 'C':'c2'}];
});
中考虑e1
和e2
的任意表达式。
另一个例子:
((λ v e1) e2)
不要试图将整个事物写成一个重要的功能,将问题分解为可管理的部分。
您可能需要以下内容:
(β-reduce '((λ x (x x)) (λ y y)) ⇒ ((λ y y) (λ y y))
,它接受一个表达式并返回表达式中可用的名称。free-variables
,它接受变量substitute-variable
,表达式v
和表达式E1
,并替换E2
中v
的所有自由出现次数{1}} E1
。如果E2
和(free-variables '(λ v E1))
的交集为空,则可以进行替换。
如果您的课程结构合理,您已经编写了这些功能,或者与它们非常相似的功能。
请记住,减少只需要一个步骤" - 您应该只减少最外层的应用程序,如您给出的第一个示例所示。