如何从字符串定义我的函数?

时间:2013-09-26 19:06:40

标签: function fortran definition

这是我所知道的某些功能的正常定义:

real function f(x)
  real x
  f = (sin(x))**2*exp(-x)
end function f

但我想从某个字符串定义一个函数,例如程序会让我写它,然后它会在程序中定义函数 f 。在Fortran中这可能吗?

2 个答案:

答案 0 :(得分:4)

您在reflective programming languages中可以找到什么,在Fortran中是不可能的。

从上面的链接引用:

支持反射的语言提供了许多在运行时可用的功能,否则这些功能在较低级别的语言中无法实现。其中一些功能是:

  • 在运行时发现并修改源代码构造(例如代码块,类,方法,协议等)作为第一类对象。

  • 将与类或函数的符号名称匹配的字符串转换为对该类或函数的引用或调用。

  • 在运行时评估字符串,就像它是源代码语句一样。

  • 为语言的字节码创建一个新的解释器,为编程结构赋予新的含义或目的。

答案 1 :(得分:1)

一旦尝试实现类似的东西,我就参与了一个项目。我们读入一个字符串,其中包含一个带有命名变量和数学运算的字符串(如果你愿意的话,这个函数)。在这个字符串中,变量然后被它们的数值替换,并且评估了术语。

基本思想并不太难,但它需要大量的字符串操作 - 而且在编程语言的上下文中它不是function

我们这样做了:

  • +-/*递归分割字符串,但请记住尊重括号
  • 如果无法做到这一点(不违反包围),请评估剩余的字符串:
    • 它是否包含cos之类的数学表达式?是=>递归参数
    • 否=>评估数学表达式(不允许变量,但它们被替换)

这很有效,但需要:

  • 拆分字符串
  • 在字符串中匹配
  • 用其他字符串替换字符串等。

这在Fortran中并不容易,所以如果你有其他选择(比如调用一个返回值的外部工具/脚本),我会调查一下 - 特别是如果你是Fortran的新手!