标签: recursive-datastructures

scalacheck任意隐含和递归生成器

我看到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)

scala recursive-datastructures scalacheck

13
推荐指数
2
解决办法
4070
查看次数

在Julia中理解没有基本情况的递归

这个片段来自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)

查看//函数如何实现,然后与中缀表示法一起使用?这实际上如何返回一个值?

当我看到这段代码时,我解释如下:

  1. //使用Rational和Integer调用该函数.
  2. 但是它会在没有其他参数的情况下进行递归调用.

#2真的让我很困惑.数据结构中的递归在哪里结束?//如果不断评估任何值,如何返回值?

请帮我理解这个.

recursion recursive-datastructures julia

13
推荐指数
1
解决办法
227
查看次数

如何在浏览器中实现CSS和DOM?

这是一个非常学术性的问题.我想知道浏览器是如何实现的,因为使用什么数据结构或算法将CSS选择器映射到特定的DOM元素.它是通过哈希表完成的吗?DOM子节点如何知道应用于父节点的样式也适用于自身等.我一直在关注Mozilla开发人员中心并且没有找到任何内容.关于这个主题的任何文件或书籍将非常感谢...谢谢!

browser algorithm dom recursive-datastructures data-structures

11
推荐指数
1
解决办法
3483
查看次数

通过良好类型的错误处理将相互递归的ADT联系起来

(注意:这篇文章是一个literate-haskell文件.你可以将它复制粘贴到文本缓冲区中,保存为someFile.lhs,然后使用ghc运行它.)

问题描述:我想要创建一个具有两个不同节点类型的图形,这些节点类型相互引用.以下示例非常简化.这两个数据类型 AB,实际上是相同的位置,但有一个原因,他们在原来的程序不同.

我们会把枯燥的东西拿走.

> {-# 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)

haskell recursive-datastructures tying-the-knot

10
推荐指数
1
解决办法
251
查看次数

Python无限期挂起,尝试删除深度递归对象

我用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

10
推荐指数
2
解决办法
474
查看次数

使用PHP将目录结构(字符串)解析为JSON

我有一个像这样的文件路径字符串数组

  • 视频/滑稽/ jelloman.wmv
  • 视频/滑稽/ bellydance.flv
  • 视频/ abc.mp4
  • 视频/ june.mp4
  • 视频/ cleaver.mp4
  • 音频/ uptown.mp3
  • 音频/ juicy.mp3
  • fun.wmv
  • jimmy.wmv
  • herman.wmv

最终目标是让他们到jsTree.我从上面的示例字符串中构建了一个原型树.看看:http://jsfiddle.net/ecropolis/pAqas/

php json recursive-datastructures

9
推荐指数
2
解决办法
1万
查看次数

Gson使用递归依赖关系反序列化复杂对象

我有几个包含彼此递归依赖的类,我使用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)

java json recursive-datastructures gson deserialization

9
推荐指数
1
解决办法
5612
查看次数

在F-algebras中编写Fix/Mu的通用实例

在阅读了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

9
推荐指数
1
解决办法
210
查看次数

类型理论中mu(μ)绑定的范围

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)

以上都是常规类型吗?

haskell types recursive-datastructures fixpoint-combinators

9
推荐指数
2
解决办法
433
查看次数

PHP RecursiveIterator遍历

我有一个表示表单的结构,我想使用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)

php oop spl recursive-datastructures

8
推荐指数
1
解决办法
3877
查看次数