我看到scalacheck似乎是一个非常明显的错误,如果真的存在,我无法看到人们如何将它用于递归数据结构.
StackOverflowError在构造Arbitrary值时,此程序在scalacheck接管之前失败.请注意,s 的Tree类型和生成器Tree是从这个scalacheck教程中逐字记录的.
package treegen
import org.scalacheck._
import Prop._
class TreeProperties extends Properties("Tree") {
trait Tree
case class Node(left: Tree, right: Tree) extends Tree
case class Leaf(x: Int) extends Tree
val ints = Gen.choose(-100, 100)
def leafs: Gen[Leaf] = for {
x <- ints
} yield Leaf(x)
def nodes: Gen[Node] = for {
left <- trees
right <- trees
} yield Node(left, right)
def trees: Gen[Tree] = Gen.oneOf(leafs, nodes)
implicit lazy …Run Code Online (Sandbox Code Playgroud) 这个片段来自Julia 中Rational Numbers的实现:
# Rational.jl
# ...
Rational{T<:Integer}(n::T, d::T) = Rational{T}(n,d)
Rational(n::Integer, d::Integer) = Rational(promote(n,d)...)
Rational(n::Integer) = Rational(n,one(n))
//(x::Rational, y::Integer) = x.num // (x.den*y) <--- HERE!
# ...
Run Code Online (Sandbox Code Playgroud)
查看//函数如何实现,然后与中缀表示法一起使用?这实际上如何返回一个值?
当我看到这段代码时,我解释如下:
//使用Rational和Integer调用该函数.#2真的让我很困惑.数据结构中的递归在哪里结束?//如果不断评估任何值,如何返回值?
请帮我理解这个.
这是一个非常学术性的问题.我想知道浏览器是如何实现的,因为使用什么数据结构或算法将CSS选择器映射到特定的DOM元素.它是通过哈希表完成的吗?DOM子节点如何知道应用于父节点的样式也适用于自身等.我一直在关注Mozilla开发人员中心并且没有找到任何内容.关于这个主题的任何文件或书籍将非常感谢...谢谢!
browser algorithm dom recursive-datastructures data-structures
(注意:这篇文章是一个literate-haskell文件.你可以将它复制粘贴到文本缓冲区中,保存为someFile.lhs,然后使用ghc运行它.)
问题描述:我想要创建一个具有两个不同节点类型的图形,这些节点类型相互引用.以下示例非常简化.这两个数据类型
A和B,实际上是相同的位置,但有一个原因,他们在原来的程序不同.
我们会把枯燥的东西拿走.
> {-# LANGUAGE RecursiveDo, UnicodeSyntax #-}
>
> import qualified Data.HashMap.Lazy as M
> import Data.HashMap.Lazy (HashMap)
> import Control.Applicative ((<*>),(<$>),pure)
> import Data.Maybe (fromJust,catMaybes)
Run Code Online (Sandbox Code Playgroud)
数据类型定义本身是微不足道的:
> data A = A String B
> data B = B String A
Run Code Online (Sandbox Code Playgroud)
为了象征两者之间的差异,我们将给它们一个不同的
Show实例.
> instance Show A where
> show (A a (B b _)) = a ++ ":" ++ b
>
> instance Show B where
> show …Run Code Online (Sandbox Code Playgroud) 我用Python写了一个三元搜索树,我注意到当该树变得很深时,尝试删除它会导致Python无限期挂起。这是产生此行为的代码的剥离版本:
import random
import sys
from collections import deque
class Node():
__slots__ = ("char", "count", "lo", "eq", "hi")
def __init__(self, char):
self.char = char
self.count = 0
self.lo = None
self.eq = None
self.hi = None
class TernarySearchTree():
"""Ternary search tree that stores counts for n-grams
and their subsequences.
"""
def __init__(self, splitchar=None):
self.root = None
self.splitchar = splitchar
def insert(self, string):
self.root = self._insert(string, self.root)
def _insert(self, string, node):
"""Insert string at a given node.
"""
if not string: …Run Code Online (Sandbox Code Playgroud) python memory tree memory-management recursive-datastructures
我有一个像这样的文件路径字符串数组
最终目标是让他们到jsTree.我从上面的示例字符串中构建了一个原型树.看看:http://jsfiddle.net/ecropolis/pAqas/
我有几个包含彼此递归依赖的类,我使用Gson GraphAdapterBuilder将它们序列化为JSON格式,它完美地运行.现在我想将它们反序列化为相同的结构,但无法找到方法.
我做了一个例子:
class ClassA{
public int field;
public ClassB parent;
public ClassA(int f, ClassB p){
field = f;
parent = p;
}
}
class ClassB{
public Vector<ClassA> vector = new Vector<ClassA>();
}
...
ClassB b = new ClassB();
ClassA a1 = new ClassA(1,b);
ClassA a2 = new ClassA(2,b);
ClassA a3 = new ClassA(3,b);
b.vector.add(a1);
b.vector.add(a2);
b.vector.add(a3);
//Serializing object b
GsonBuilder gsonBuilder = new GsonBuilder();
new GraphAdapterBuilder()
.addType(ClassA.class)
.addType(ClassB.class)
.registerOn(gsonBuilder);
Gson gson = gsonBuilder.create();
String json = gson.toJson(b);
Run Code Online (Sandbox Code Playgroud)
输出给了我想要的东西:
{"0x1":{"vector":["0x2","0x3","0x4"]},"0x2":{"field":1,"parent":"0x1"},"0x3":{"field":2,"parent":"0x1"},"0x4":{"field":3,"parent":"0x1"}} …Run Code Online (Sandbox Code Playgroud) 在阅读了Milewski的F-algebra文章后,我尝试实现它并用于解决现实问题.但是,我似乎无法弄清楚如何编写实例Fix,
newtype Fix f = Fx { unFix :: f (Fix f) }
cata :: Functor f => (f a -> a) -> Fix f -> a
cata alg = alg . fmap (cata alg) . unFix
Run Code Online (Sandbox Code Playgroud)
例如,让我说我这个简单的代数:
data NatF a = Zero | Succ a deriving Eq
type Nat = Fix NatF
Run Code Online (Sandbox Code Playgroud)
现在我尝试实现一个实例Eq(注意:deriving不起作用):
instance ??? => Eq (Fix f) where
(==) = ???
Run Code Online (Sandbox Code Playgroud)
这就是我陷入困境的地方.我如何填写???以使其工作?这甚至可能吗?
haskell algebra typeclass recursive-datastructures fixpoint-combinators
Haskell中的列表可能如下所示:
data List a = Nil | Cons a (List a)
Run Code Online (Sandbox Code Playgroud)
类型理论解释是:
??.??.1+??
Run Code Online (Sandbox Code Playgroud)
它将列表类型编码为仿函数的固定点.在Haskell中可以表示:
data Fix f = In (f (Fix f))
data ListF a b = Nil | Cons a b
type List a = Fix (ListF a)
Run Code Online (Sandbox Code Playgroud)
我很好奇早期的μBinder的范围.外部作用域中绑定的名称是否仍可在内部作用域中使用?比如,以下是一个有效的表达式:
??.1+(??.1+??)?
Run Code Online (Sandbox Code Playgroud)
......也许它是一样的:
??.??.1+(1+??)?
Run Code Online (Sandbox Code Playgroud)
...但是,当重用名称时,情况会如何变化:
??.??.1+(??.1+??)?
Run Code Online (Sandbox Code Playgroud)
以上都是常规类型吗?
我有一个表示表单的结构,我想使用RecursiveIterator迭代它.问题是这只会返回顶级问题.我究竟做错了什么?
整体形式:
class Form implements RecursiveIterator{
private $id;
private $caption;
private $other_text;
private $questions = array();
private $current;
private function __construct(DibiRow $row){
$this->id = $row->id;
$this->caption = $row->caption;
$this->other_text = $row->other_text;
$this->loadQuestions();
}
private function loadQuestions(){
$questions = dibi::query('SELECT * FROM cyp_questions WHERE form_id = %i AND parent_id IS NULL', $this->id);
while($question = $questions->fetch()) $this->questions[] = new Question($question->question_id, $question->type, $question->caption, $question->other_text, $question->triggers_unique == 1);
}
/**
* @throws InvalidArgumentException
* @param $id
* @return Form
*/
public static function loadById($id){ …Run Code Online (Sandbox Code Playgroud)