1

我对这个编程挑战感到很困惑——我不知道它是用什么语言编写的(这是乐趣的一部分,但我需要一些帮助)。我不是在寻找挑战的答案,即在代码中找到错误,所以不要为我破坏它。我只需要找到它使用的好语言。代码挑战的前提是代码中只有一行存在错误,因此我们必须接受不止一行的所有内容。

我徒劳地试图弄清楚。我查看了rosettacode,但在那里我什至找不到任何像这样的东西。它看起来最接近的是Algol 60,但严格来说它不是那里定义的 Algol 60 。有各种各样的问题。一方面,%Erlang 中的注释以 like 开头。在defineAlgol 60 中没有,奇怪的<unsigned number> #语法也没有。Algol 60 还对标识符使用了转义语法(它们有一个单独的命名空间,通常以粗体打印)——这也无处可见。

看看我熟悉的不太流行的东西,它不在 IEC 61131-3 中,也不是 HAL/S。

begin

  % Speed of light in meters/second
  define c=2.99792458e8#;

  % Convert frequency in Hz to free-space wavelength in meters.
  real procedure wavelength(frequency);
    value frequency;
    real frequency;
    wavelength := c/frequency;

  real f, lambda;

  lambda := wavelength(f);
end.
4

3 回答 3

1

我很幸运能够使用大量使用 Algol 60 的两种机器。首先是 English Electric KDF9,它有几个 Algol 60 编译器,与经修订的 Algol 60 报告中描述的语言相当接近。然后我搬到了 Burroughs Machines,最终变形为 Unisys。所以 DEFINE 语句是 Unisys Extended Algol 用于文本替换的一个特性。请参阅 ALGOL 编程参考手册1的第 3-90 页。我认为必须知道,在这种 Algol 风格中,具有指数部分的数字常量需要在前面加上 @ 而不是 E 是不公平的模糊!请参阅第 2-6 页,共1页。

于 2019-10-12T00:54:31.273 回答
0

第 8 周的巡回酒窖密码挑战赛现已结束。挑战的作者搞砸了,顺便说一句,我会接受他们的。

正如我所说,语言Algol 60 。没有“只是”大陵五这样的东西,大陵五 68 是完全不同的野兽!错误在于“指数”,据说正确的是define c=2.99792458@8.

唉,那一周的挑战是虚假的,因为他们已经获得了一些模糊的 Algol 60 实现,而不是标准的实现,所以我在某种程度上对他们很生气。在一个本应由作者以外的人解决的代码挑战中如此晦涩是没有意义的。我的意思是来吧,如果有 stackoverflow 曝光的网站上没有人会指向该片段所在的 Algol 60 的任何晦涩变体,那么他们真的认为会有任何答案吗?

哎呀,对于这里的大多数人来说,它甚至不是很明显Algol 60,尽管 Algol 60 在计算历史上有点像一件大事。Backus-Naur 形式直接来自算法语言 Algol 的修订报告 60

在寻找答案时,我甚至在 1960 年代中期的英国 Electric KDF9 仿真器上运行Whetstone Algol 。挑战代码似乎没有使用那个特定的变体,即使我在第一次将它变成标准的 Algol 60 形式(没有定义,没有评论,特殊处理关键字)之后编译它。

于 2013-07-29T14:35:27.407 回答
-4

错误是

f是一个自由变量。

这让我相信它确实是一种虚构的语言,只是为了抽象地测试你,因为可以在不知道任何语法细节的情况下检测到这个错误。您已经分析了可能的主要候选者,但它并不像任何东西。如果重点不是要提高您的语言技能,而是要测试您的通用编程技能,那么这又是有道理的。

我对您解决问题的提示是尝试将其完整地翻译成真正的编程语言。会有一个错误是你无法消除的。

我给你的第二个提示是:

lambda抽象的目的是什么?

于 2013-07-26T01:14:50.100 回答