首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mathjs自定义和函数

Mathjs自定义和函数
EN

Stack Overflow用户
提问于 2017-02-02 21:16:38
回答 1查看 639关注 0票数 1

我正在尝试实现我自己的自定义和函数。目标是有一个名为"sumFromTo“的函数,它接受4个参数*迭代器名称*从*到*函数

其中“函数”可以是其他函数,而解决方案是将所有函数之和。例如

代码语言:javascript
运行
复制
// works 
  sumFromTo(i,1,10,i+1)  // = 65

但是如果我把它包装成另一个函数,它就会崩溃,因为mathjs不知道"x“

代码语言:javascript
运行
复制
// works not because x is undefined
test(x) = sumFromTo(i,1,x,i+1) 
test(10)

我的进口品是这样的:

代码语言:javascript
运行
复制
function sumFromTo(iteratorName, from, to, toString, f) {
    var total = 0;
    var toVal = typeof to == "number" ? to : to.length;
    for (var iterator = from; iterator <= toVal; iterator++) {
        mathScope[iteratorName] = iterator;
        mathScope[toString + "_" + iterator] = to[iterator];
        total += math.eval(f, mathScope);
    }
    return total;
}
sumFromTo.transform = function (args, math, scope) {
    /*   Iterator    */
    var iteratorName = "notfound";
    if (args[0] instanceof math.expression.node.SymbolNode) {
        iteratorName = args[0].name;
    } else {
        throw new Error('First argument must be a symbol');
    }

    /*    Startvalue of Iterator    */
    if (args[1] instanceof math.expression.node.ConstantNode) {
        if (args[1].value == 0) {
            throw new Error('Sum must counting from >=1: 0 given');
        }
    }

    /*    to: Array to loop    */
    if (args[2] instanceof math.expression.node.SymbolNode) {
        var toString = args[2].name;
    }

    /*    compile    */
    var from = args[1].compile().eval(scope);
    scope[iteratorName] = from;
    var to = args[2].compile().eval(scope);

    if (to.constructor.name == "Matrix") {
        to = to.toArray();
        scope[toString] = to;
    }else{
        if(typeof to == "object"){
            to = to.toArray();
        }
    }
    return sumFromTo(iteratorName, from, to, toString, args[3].toString());
};
sumFromTo.transform.rawArgs = true;
math.import({sumFromTo: sumFromTo}, {override: true});

我创建了一个小提琴https://jsfiddle.net/o49p4zwa/2/,也许它有助于理解我的问题。

有人知道我错过了什么或者我做错了什么吗?

提前谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 21:30:50

你需要的是结束

代码语言:javascript
运行
复制
test = function(x) {
    sumFromTo(i,1,x,i+1) 
}
test(10)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42012435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档