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