我不确定这是不是一个bug,所以我想也许你们大家可能想看一看.
问题出在这个代码上:
for i=0,1,.05 do
print(i)
end
Run Code Online (Sandbox Code Playgroud)
输出应该是:
0
.05
.1
--snip--
.95
1
Run Code Online (Sandbox Code Playgroud)
相反,输出是:
0
.05
.1
--snip--
.95
Run Code Online (Sandbox Code Playgroud)
while循环也发生了同样的问题:
w = 0
while w <= 1 do
print(w)
w = w + .05
end
--output:
0
.05
.1
--snip--
.95
Run Code Online (Sandbox Code Playgroud)
w的值为1,可以在循环后通过print语句验证.
我已尽可能验证任何小于或等于.05的步骤都会产生此错误.任何高于.05的步骤应该没问题.我确认1/19(0.052631579)确实打印了1.(显然,像19.9或10.5这样的小数分母不会产生[0,1]包含的输出.)是否有可能这不是语言的错误?解释器和常规Lua文件都会产生此错误.
我正在玩制作斐波那契堆.(我在算法类中多次提到它们,我想检查它们.)我希望堆使用任何类型的节点,所以我定义了一个Node接口:
package node
type Node interface {
AddChild(other Node)
Less(other Node) bool
}
type NodeList []Node
func (n NodeList) AddNode(a Node) {
n = append(n, a)
}
Run Code Online (Sandbox Code Playgroud)
(我使用[] Node数组,因为它与堆定义具有相同的影响.)如您所见,Node接口使用Node类型的参数定义其两个函数.这应该意味着函数必须接受实现Node接口的参数.堆的其余部分使用这些节点.
在使用此堆的程序中,我创建了一个实现Node接口的类型:
package main
import "container/list"
import node "./node"
type Element struct {
Children *list.List
Value int
}
func (e Element) AddChild(f Element) {
e.Children.PushBack(f)
}
func (e Element) Less(f Element) bool {
return e.Value < f.Value
}
func main() {
a := Element{list.New(), 1}
n := new(node.NodeList)
n.AddNode(a)
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.编译器抱怨Element没有正确的接口函数定义.
cannot …Run Code Online (Sandbox Code Playgroud) 我正在自学Haskell,学习任何编程语言的最佳方法就是使用它.我目前的"练习"是一个实施.伪代码是:
take(0, list) = [] --empty list
take(n, list) = const(head(list), take(n-1, tail(list))
Run Code Online (Sandbox Code Playgroud)
我在Haskell中得到的结论是:
myTake :: (Num a) => a -> [b] -> [b]
myTake 0 l = []
myTake n (l:ls) = l : myTake n-1 ls
Run Code Online (Sandbox Code Playgroud)
当我在GHCi中加载文件时,这不会编译.这是我收到的错误消息:
Couldn't match expected type `[b]'
against inferred type `[b1] -> [b1]'
In the second argument of `(:)', namely `myTake n - 1 ls'
In the expression: l : myTake n - 1 ls
In the definition of `myTake':
myTake n (l …Run Code Online (Sandbox Code Playgroud) 我在ANTLR中编写语法,将Java源文件解析为AST以供以后分析.与其他解析器(如JavaDoc)不同,我试图保留所有注释.这很困难的注释可以在代码中的任何地方使用.如果注释在源代码中某处与语法不匹配,则ANTLR无法完成对文件的解析.
有没有办法让ANTLR自动将它找到的任何评论添加到AST?我知道词法分析器可以简单地使用任何一个{skip();}或通过将文本发送到隐藏通道来忽略所有注释.使用这些选项中的任何一个,ANTLR都可以毫无问题地解析文件.
欢迎任何想法.