【问题标题】:Abstract Data Types in Fortran 77 (Fortran-II)?Fortran 77 (Fortran-II) 中的抽象数据类型?
【发布时间】:2010-01-14 22:40:08
【问题描述】:

我正在尝试在 Fotran 77 中工作,我发现需要基于树的数据结构。除了用数组实现树之外,还有什么方法可以按照大多数语言的标准实现来构建带有指向其他节点的指针节点的树?

关于这种野兽的文档很少,而且似乎没有任何标准结构类型可以使这成为可能。

想法?

【问题讨论】:

    标签: fortran fortran77 abstract-data-type


    【解决方案1】:

    我建议您迁移到 Fortran 90 或更高版本。 FORTRAN77 和更早的语言规范中没有指针,因此编译器编写者(和用户)想出了一大堆聪明*的方法来添加必要的功能来做你想做的事情。 Fortran 90 有适合动态数据结构的指针。

    聪明*当然意味着需要高级编程技能和对内存、指针、引用和取消引用的理解(所有这些对于大多数 Fortran 程序员来说都是陌生的),这必然导致聪明*程序不能在编译器之间移植,也不能在硬件平台之间移植,也不能在程序员之间移植

    我不明白为什么你会被限制在 FORTRAN77 中工作——标准的 FORTRAN77 在语法上仍然是正确的,并且可以与 Fortran 90 编译器一起编译。当然,您必须将新的树处理代码与使用旧语言的现有代码库集成,但这并不意味着您必须使用旧语言编写新单元。

    顺便说一句,FORTRAN77 比 FORTRANII 更现代。

    【讨论】:

    • 请注意这一点。当语言的更新版本处理得更好时尝试这样的事情将导致与魔戒中的场景相似,萨鲁曼宣称“你选择了痛苦的方式!”。
    【解决方案2】:

    这在 Fortran 95/2003 中会容易得多,它具有用户定义的派生类型和指针类型。使用这些功能可以设置数据结构,例如链表和树。 (指针类型称为指针,但它们更像是别名,因为指针算术是不可能的)。 Fortran >=95 比 Fortran 77 有很多改进。我的建议是不要使用 Fortran 77,除非对 Fortran 77 中的遗留代码进行细微修改。一本好书是 Metcalf、Reid 和科恩。

    【讨论】:

    • 这真的对我一点帮助都没有。我需要一个 fortran 77 解决方案。
    • 为什么需要 FORTRAN77 解决方案?我支持 MSB。有人拿枪指着你的头吗?
    • 另外:你问了我的想法,你有我的和 MSB 的。
    • 还有这些家伙在这个...为什么是 f77 ?什么是要求你必须使用旧标准的细节......特别是因为 f77 是 f90 的子集(完全),直到......我认为 f2008 或 f2010。
    【解决方案3】:

    如果您真的不喜欢 Fortran-77,可以使用 Cray 指针:

    http://gcc.gnu.org/onlinedocs/gfortran/Cray-pointers.html

    Cray 指针是非标准的并且有一些缺点,但它们会给你一些类似于 C 指针的东西。 gfortran 和大多数商业编译器都支持它们。

    话虽如此,您最好还是使用较新的 Fortran 功能,例如 Fortran-90 指针或 Fortran 2003 中的 C 互操作性功能。

    【讨论】:

      【解决方案4】:

      没有 Cray 指针或其他骇客,实现“数据类型”的唯一方法是使用并行数组,每个数组代表一个字段。因此,索引可以引用数据类型的实例化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-15
        • 2010-10-18
        相关资源
        最近更新 更多