有没有办法判断Haskell中的列表是否无限?原因是我不想将函数length应用于无限列表.
以下命题是否成立:对于每个DTD,都有一个定义完全相同语言的XSD,并且每个XSD都有一个定义完全相同语言的DTD.或换句话说:任何DTD定义的语言集合都是任何XSD定义的语言集合?
稍微扩展一下这个问题:XML文档基本上是一个大字符串.语言是字符串的集合.例如,所有MathML文档的(无限)集合都是一种语言,所有RSS文档的集合也是如此.MathML(RSS,...)也是所有XML文档的(无限)集合的适当子集.您可以使用DTD或XSD来定义这样的XML子集.
现在,每个DTD都只定义一种语言.但是如果你想到所有可能的DTD,你会得到一套语言.我的问题是,这个设置与你从所有可能的XSD获得的设置完全相同吗?如果是这样,那么DTD和XSD在两者所定义的XML语言范围相等的意义上是等价的.
为什么这个问题很重要?如果DTD和XSD都是等效的,则可以编写一个程序,它将DTD作为输入并为您提供等效的XSD,另一个程序则执行相反的操作.我知道有很多程序声称要做到这一点,但我怀疑这是否真的有可能.
当我把以下lambda表达式放入ghci我得到1:
ghci> (\x -> x+1) 0
1
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该功能时,iterate我得到了
ghci> take 10 (iterate (\x -> x+1) 0)
[0,1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我希望得到一个等于的列表[1..10].为什么不?