정말 큰 트리이고 특히 데이터에서 생성 된 경우 기능적 접근 방식을 사용하여 데이터와 같은 의사 결정 기능을 처리 할 수 있습니다. 예를 들면 :
var decisionTree =
new Case(true, Array(
new Case (function(n){ return n < 0; }, Math.sin),
new Case (function(n){ return n < 2; }, "0<= n < 2"),
new Case (true, "Greater than two ")));
decisionTree.evaluate(1); // evaluates to string "0<= n < 2"
decisionTree.evaluate(-Math.PI/2); // evaluates to -1
decisionTree.evaluate(5); // evaluates to string "Greater than two"
이 구현을 사용하여 수행 할 수 있습니다 임의의 둥지 당신의 나무 :
// Represents a predicate and corresponding action to take if predicate is a
// match.
//
// predicate : true or Function(object) returning a boolean.
//
// action : One of Function, Case, Array of Cases or other value (see
// Case.evaluate as to how each is applied)
//
//
Case = function (predicate, action) {
this.predicate = predicate;
this.action = action;
};
Case.prototype = {
nomatch : { match : false },
match : function (v) { return { match : true, result :v }; },
// Recursively test Cases and applies corresponding action on
// `object`.
//
// The action applied depends on the datatype of `action`:
//
// - Function : evaluates to `action(object)`
//
// - Case : A subsequent test is performed. Evaluates to whatever
// the Cases action evaluates to.
//
// - Array of Cases : Subsequent tests are performed. Evaluates to whatever
// the action of the first matching Case evaluates to.
//
// - Any other Value : Evaluates to itself
//
// returns object containing fields:
//
// match: boolean, indicates if Case was a match
//
// result: result of action applied
//
evaluate : function(object) {
var match = this.predicate;
if (match instanceof Function)
match = match(object);
if (match) {
if (this.action instanceof Function)
return this.match(this.action(object));
if (this.action instanceof Case)
return this.action.evaluate(object);
if (this.action instanceof Array) {
var decision;
var result;
for (var c = 0; c < this.action.length; c++) {
decision = this.action[c];
if (decision instanceof Case) {
result = decision.evaluate(object);
if (result.match)
return result;
} else throw("Array of Case expected");
}
return this.nomatch;
}
return this.match(this.action);
}
return this.nomatch;
}
};
는 의사 결정 트리 다만 특별히 구조화 된 흐름도이다? – Dale