4

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

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

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

4

2 回答 2

4

您正在寻找的东西在反射编程语言中是可能的,而在 Fortran 中是不可能的。

从上面的链接引用:

支持反射的语言提供了许多在运行时可用的功能,否则这些功能在较低级别的语言中很难实现。其中一些功能具有以下能力:

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

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

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

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

于 2013-09-26T19:20:54.733 回答
1

我曾经做过一个项目,试图实现类似的目标。我们读入一个字符串,其中包含一个带有命名变量和数学运算的字符串(如果你愿意的话,一个函数)。在这个字符串中,变量然后被它们的数值替换并评估了这些术语。

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

我们是这样做的:

  • +递归地在, -, /,处分割字符串*,但记住要使用括号
  • 如果这是不可能的(不违反括号),请评估剩余的字符串:
    • 它是否包含类似的数学表达式cos?是 => 递归到参数
    • 否 => 计算数学表达式(不允许使用变量,但它们已被替换)

这工作得很好,但它需要:

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

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

于 2013-09-26T19:27:48.967 回答