识别变量并插入用户选择的值

Identifying a variable and plugging the user-selected value

如果我有一个需要用户输入函数的程序,我该如何识别函数中的变量并将其插入?例如:

Input X: 3
Input Function: 3x + 3

那么,我将如何隔离 x,或者一般来说,只是插入 x 的值?我必须使用带有 isnan() 的字符串组件分隔符吗?

编辑:

好的!我使用 NSExpression 让它工作。到目前为止,它看起来不错,边缘有点粗糙,但很好。这是我遇到的情况:我一直在尝试不断地将产品添加到变量,因为 for 循环从下限到上限。

for eachSum in lowLim...upLim{
        let expression = NSExpression(format: funct)
        var result = (expression.expressionValueWithObject(["x":eachSum], context: nil) as NSNumber).floatValue
        println(result)
        sumArray = sumArray + Int(result)
    }

我有点让自己进入变量名。这实际上应该是一个求和程序,你知道,用大写 Sigma 表示的计算求和。循环应该通过每个 lowLim 并将其插入,然后在到达 upLim 时停止。每次,它将 eachSum 的乘积添加到 sumArray。

如果我设置 lowLim = 1upLim = 3 并且函数是 3*x,我应该得到 18,但我得到的却是 9。关于如何解决这个问题有什么建议吗?


备注:

funct = 函数的文本字段的字符串值
sumArray = 最终答案

此外,请原谅糟糕的格式 and/or 添加了可能不需要的额外内容。


一切都已修复!这个问题,虽然听起来很愚蠢,但我没有考虑到。我认为我不能把事情搞砸。我将 lowLim 插座连接到 upLim 相同的 文本字段。感谢所有提供帮助的人。非常好的学习体验。

您好像在谈论输入数学函数然后对其求值。您必须决定支持哪些操作以及用户输入这些函数必须使用的确切语法。这称为 domain-specific language 或 DSL。

一旦确定了 DSL,就必须为其编写一个简单的解析器。这是一个很大的主题,可以非常简单或非常复杂,具体取决于您的 DSL 的简单或复杂程度。

如果您正在寻找一些简单的 "out-of-the-box" 解决方案,我什么都不知道,但如果它存在我也不会感到惊讶。您很可能必须自己动手。

查看 Apple 的 NSScanner 文档。这是一个不错的开始。一些人已经开始为 Swift 开发解析器组合器库。我不会在这里 link 他们中的任何一个,因为现在还很早,但请尝试使用搜索引擎。

正如 Trevör Anne Denise 在下面的评论中提到的,NSExpression 是另一个很好的起点。 (我将深入研究自己。)