小编T S*_*uds的帖子

奇怪的循环问题

我不确定这是不是一个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文件都会产生此错误.

floating-point lua

7
推荐指数
1
解决办法
720
查看次数

转到使用定义中的接口的接口

我正在玩制作斐波那契堆.(我在算法类中多次提到它们,我想检查它们.)我希望堆使用任何类型的节点,所以我定义了一个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)

interface go

4
推荐指数
1
解决办法
152
查看次数

Haskell递归和类型错误

我正在自学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)

recursion haskell types

3
推荐指数
1
解决办法
291
查看次数

使用ANTLR捕获(并保留)所有注释

我在ANTLR中编写语法,将Java源文件解析为AST以供以后分析.与其他解析器(如JavaDoc)不同,我试图保留所有注释.这很困难的注释可以在代码中的任何地方使用.如果注释在源代码中某处与语法不匹配,则ANTLR无法完成对文件的解析.

有没有办法让ANTLR自动将它找到的任何评论添加到AST?我知道词法分析器可以简单地使用任何一个{skip();}或通过将文本发送到隐藏通道来忽略所有注释.使用这些选项中的任何一个,ANTLR都可以毫无问题地解析文件.

欢迎任何想法.

parsing comments antlr

3
推荐指数
3
解决办法
3552
查看次数

标签 统计

antlr ×1

comments ×1

floating-point ×1

go ×1

haskell ×1

interface ×1

lua ×1

parsing ×1

recursion ×1

types ×1