在尝试学习Frege时,我将一些代码从Dierk's Real World Frege复制到了在线REPL,并尝试执行它(另请参阅How to execute a compiled code snipped in Frege online repl)。我尝试过的脚本无法编译: - (
我做错了什么?
以下是无法编译的示例:
println ( 2 *-3 ) -- unlike haskell, this will work!
以及整个ValuesAndVariables.fr代码
答案 0 :(得分:3)
不可避免的是,在一年多的时间里,一种不断发展的语言(及其库)发生了变化,以至于旧的代码将不再编译。
如果我们能够看到一个例子,那将是很好的,而不是像#"大多数"这样的概括。
接下来最好的事情是在Dierks项目中遇到一个指向错误的问题。
但最好的办法是努力找出问题所在。这也会加强你的学习过程。
以下是两个可以提供帮助的资源:
https://github.com/Frege/frege/wiki/New-or-Changed-Features - 每个版本的发行说明,包含发行版之间已更改的内容摘要,特别是代码不再编译的原因以及如何更正它。
http://www.frege-lang.org/doc/fregedoc.html - 图书馆文档。可以解释可能的错误,例如未找到导入或缺少标识符。
去吧,试一试。而且我确信迪尔克很乐意接受拉动请求。
错误:
println ( 2 *-3 )
确实源于语法上的变化。 最近,要求相邻的操作员被至少一个空间隔开。 因此
println (2 * -3)
但是,您在此处收到的错误消息是:
can't resolve `*-`, did you mean `-` perhaps?
这可能触发了它试图将*-
解释为单个运算符的想法。
ValuesAndVariables1.fr
中的另一个错误确实是初学者的一个显示阻止。背景是我们有一个pi
类型为Double
,另一个类型为Float
,可能还有更多类型类Floating
,所以需要告诉哪一个打印。
以下内容适用:
import Prelude.Math -- unless already imported
println Float.pi
println (pi :: Double)
答案 1 :(得分:0)
http://try.frege-lang.org的在线REPL目前基于Frege V3.23.370-g898bc8c。 Dierk的代码示例基于V3.21.500-g88270a0(可以在gradle构建文件中看到)。
似乎Frege开发人员决定在这些版本之间略微改变Frege语法。结果是您将无法再在在线REPL中运行这些代码片段。