我对这个编程挑战感到困惑 - 我不知道它是什么语言(这是乐趣的一部分,但我需要一些帮助)。 我不是在寻找挑战的答案,即在代码中找到一个错误,所以不要为我破坏它。我只需要找到它所使用的优秀语言。代码挑战预先假定代码中只有一行存在错误,因此我们必须接受多行中的所有内容。
我试图弄明白这一点。我看过rosettacode,我在那里找不到任何东西。它最接近的是Algol 60,但并不严格按照那里定义的Algol 60。有各种各样的问题。例如,评论以%
开头,就像在Erlang中一样。 Algol 60中没有define
,也没有奇怪的<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.
答案 0 :(得分:1)
我很幸运能够与两台使用Algol 60的机器一起工作。 首先,具有多个Algol 60编译器的English Electric KDF9非常符合修订的Algol 60报告中描述的语言。 然后我搬到了Burroughs Machines,该机器最终变成了Unisys。 因此,DEFINE语句是Unisys Extended Algol用于文本替换的功能。请参阅《 ALGOL编程参考手册1》的第3-90页。 我认为必须知道,在这种Algol风格中,具有指数部分的数字常数需要在此之前加上@而不是E作为前缀,这是不公平的!参见1的第2-6页。
答案 1 :(得分:0)
Circuit Cellar Code Challenge的第8周现已结束。挑战的作者搞砸了,我会和他们一起讨论,BTW。
正如我所说,语言是 Algol 60 。没有“只是”Algol这样的东西,Algol 68是一个完全不同的野兽!错误是“指数”,据说正确的是define c=2.99792458@8
。
哎呀,对于大多数人来说, Algol 60并不是很明显,尽管Algol 60在计算史上有点像是一件大事。 Backus-Naur表格直接来自Revised Report on the Algorithmic Language Algol 60。
在寻找答案时,我从20世纪60年代中期开始对英国电气KDF9仿真运行Whetstone Algol。似乎挑战代码没有使用该特定变体,即使我在首次将其转换为标准Algol 60表单后进行编译(没有定义,没有评论,特殊处理关键字)。
答案 2 :(得分:-4)
错误是
f
是一个自由变量。
这让我相信它真的是一种虚构的语言,只是为了抽象地测试你,因为可以在不知道任何语法细节的情况下检测到这个错误。你已经分析了它可能是什么的主要候选人,它并不是真的像什么。如果重点不在于这是一个用语言提高技能的难题,而是为了测试你的通用编程技巧,那么这又有意义。
我解决问题的秘诀就是尝试将其翻译成真正的编程语言。您将无法消除一个错误。
我的第二个暗示是:
lambda抽象的目的是什么?