小编Ben*_*itz的帖子

用于检测有向图中的循环的最佳算法

检测有向图中所有周期的最有效算法是什么?

我有一个有向图表示需要执行的作业计划,作业是节点,依赖是边缘.我需要检测此图中循环的错误情况,从而导致循环依赖.

algorithm graph-theory directed-graph

376
推荐指数
8
解决办法
29万
查看次数

什么是Scala中更高级的kinded类型?

您可以在网上找到以下内容:

  1. 更高的kinded类型==类型构造函数?

    class AClass[T]{...} // For example, class List[T]
    
    Run Code Online (Sandbox Code Playgroud)

    有人说这是一种更高的kinded类型,因为它抽象了符合定义的类型.

    较高的kinded类型是采用其他类型并构造新类型的类型

    这些虽然也称为类型构造函数.(例如,在Scala编程).

  2. 更高的kinded type == type构造函数,它将类型构造函数作为类型参数?

    更高级别的Generics中,您可以阅读

    ...抽象类型抽象的类型("更高级的类型")......"

    这表明

    class XClass[M[T]]{...} // or
    
    trait YTrait[N[_]]{...} // e.g. trait Functor[F[_]]
    
    Run Code Online (Sandbox Code Playgroud)

    是一种更高级的类型.

因此,考虑到这一点,很难区分类型构造函数,更高的kinded类型类型构造函数,它将类型构造函数作为类型参数,因此上面的问题.

generics constructor types scala higher-kinded-types

262
推荐指数
5
解决办法
6万
查看次数

如何选择Clojure JSON库

Clojure有多个JSON解析器/编写器库,包括:

每种产品的优缺点是什么,特别是在速度,内存占用和编程方便性方面?还有其他重要因素需要考虑吗?

json clojure

19
推荐指数
1
解决办法
4425
查看次数

你把monad里面的数据称为什么?

在演讲和写作中,我一直想要参考monad中的数据,但我不知道该怎么称呼它.

例如,在Scala中,传递给函数的参数flatMap被绑定到......呃...... monad中的那个东西.在:

List(1, 2, 3).flatMap(x => List(x, x))
Run Code Online (Sandbox Code Playgroud)

x 受到限制,我没有一句话.

稍微复杂一点,传递给Kleisli箭头的参数不一定会绑定到monad中的所有数据.与List,Set,Stream,和许多其它的单子,flatMap调用Kleisli箭头很多次,结合x到单子内每次不同片数据.或者甚至不是"数据",只要遵循monad法则.无论它是什么,它都包裹在monad中,并flatMap在没有包装的情况下传递给你,也许一次一件.我只是想知道什么叫做相关的内部monad内容,x至少在某种程度上,所以我可以阻止所有这些愚蠢的语言.

这个东西/数据/价值/东西/无论它是什么标准或传统术语?

如果没有,"糖果"怎么样?

monads haskell functional-programming scala terminology

19
推荐指数
2
解决办法
1762
查看次数

可下载的Clojure参考手册

我找不到可下载版本的Clojure参考手册(最好是PDF).有没有人知道我可以下载的地方?

documentation clojure

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

如何让抽象数据类传递给mypy?

mypy v0.910 拒绝 Python 3.9 中的抽象数据类。这是最小的可重复示例:

from abc import ABC, abstractmethod
from dataclasses import dataclass

@dataclass
class Liquid(ABC):

    @abstractmethod
    def drip(self) -> None:
        pass
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

$ mypy --python-version 3.9 so.py
so.py:4: error: Only concrete class can be given where "Type[Liquid]" is expected
Found 1 error in 1 file (checked 1 source file)
Run Code Online (Sandbox Code Playgroud)

如何让此代码通过mypy


笔记

我从mypy 问题 #5374中了解到,这是mypy中的一个错误,于 2018 年首次注意到,但仍未得到纠正。不过,我认为人们必须将mypy与抽象数据类一起使用,因此必须有一种解决方法或正确的方法来定义或注释该类。有什么推荐的?

错误消息的基础似乎是mypy假设任何类型的对象都Type可以实例化,但抽象类不能实例化。这似乎是错误,因为Type定义为表示类对象,而不一定是具体的类对象(即可以实例化的类对象)。

添加# type: ignore到包含的行 …

python abstract-base-class mypy python-dataclasses python-typing

16
推荐指数
2
解决办法
5552
查看次数

在特征中扩展特征时,"超级"指的是什么?

我想在一个特征中扩展一个特征,如下所示:

  trait NodeTypes {
    trait Node {
      def allNodesHaveThis: Int
    }
  }

  trait ScrumptiousTypes extends NodeTypes {
    trait Node extends super.Node {
      def scrumptiousness: Int
    }
  }

  trait YummyTypes extends NodeTypes {
    trait Node extends super.Node {
      def yumminess: Int
    }
  }

  object Graph extends NodeTypes with ScrumptiousTypes with YummyTypes {
    case class Node() extends super.Node {
      override def allNodesHaveThis = 1
      override def scrumptiousness = 2  // error: ScrumptiousTypes.Node has been disinherited
      override def yumminess = 3
    }
  } …
Run Code Online (Sandbox Code Playgroud)

scala traits super mixins inner-classes

15
推荐指数
1
解决办法
504
查看次数

为什么Scala不能推断路径依赖类型的路径 - 即使是来自显式的自引用?

我想将一个对象传递给一个接受带有投影类型的参数的函数,并让Scala推断出该对象的类型来自包含它的对象.这里有一些简单的代码来说明难度:

trait Cult { cult_ =>
  case class CultLeader(personality: Personality) {
    val cult = cult_
    val follower = personality.attractFollower(this)
  }
  case class Follower(leader: CultLeader, name: String)
}

trait Personality {
  def attractFollower(leader: Cult#CultLeader) =
    leader.cult.Follower(leader, "Fred")   <-- THIS LINE FAILS TO COMPILE
}
Run Code Online (Sandbox Code Playgroud)

换句话说,CultLeader的Personality应该吸引追随者到与CultLeader相同的邪教.

Scala 2.11.2编译器说:

TypeProjection.scala:11: error: type mismatch;
 found   : Cult#CultLeader
 required: leader.cult.CultLeader
    leader.cult.Follower(leader, "Fred")
                         ^
Run Code Online (Sandbox Code Playgroud)

如果我添加一个强制转换,它会正确编译并运行,如下所示:

    leader.cult.Follower(leader.asInstanceOf[leader.cult.CultLeader], "Fred")
Run Code Online (Sandbox Code Playgroud)

这似乎很笨拙,它引入了运行时检查,以便在编译时可以推导出来.至少我有一个解决方法.我怎样才能让Scala编译器推断出它leader的类型实际上是leader.cult.CultLeader什么?

我宁愿不cult作为另一个论点传递给attractFollower.在我的实际代码中,这可能会导致很多丑陋的传递cult参数 - 当它真的不需要传递时.

scala type-inference path-dependent-type type-projection

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

使用clojure.main/repl时,如何获得类似readline/rlwrap的功能?

当我使用repl函数时,clojure.main如何从REPL获得类似readline(或类似rlwrap)的功能

背景这是我在利用和自定义break功能,从喜的Clojure的第一版.我在lein replREPL中使用它.当我的"断点"开始时,Leiningen的REPL的类似readline的功能消失了,这有点不方便.我的肌肉记忆让我很快被击中Enter.在我能够阻止自己之前,我已经在我的终端中找到了这个:

debug=> ^[[A
CompilerException java.lang.RuntimeException: Unable to resolve symbol: in this context, compiling:(/tmp/form-init13211381000659590518.clj:1:1) 
Run Code Online (Sandbox Code Playgroud)

现在我的REPL卡住了,我必须杀死终端或进程才能离开.如果我能在这个二级REPL中使用readline,或者至少可以防止这个常见问题导致我的调试会话脱轨,我非常喜欢.

clojure readline leiningen read-eval-print-loop rlwrap

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

套装的头部和尾部是否保证相互排斥?

文件说,Set.head返回"第一"项目,并.tail返回"所有,但第一个".*由于Set并没有真正有一个"第一"项目,该文件警告说,如果没有一个有序的类型,你可能会得到不同的结果不同的运行.但你保证尾巴不包括头部吗?

我问的原因是我想知道是否可以这样下去Set:

def recurse(itemsToExamine: Set[Item], acc: Result): Result =
  if (itemsToExamine.isEmpty) acc
  else {
    val item = itemsToExamine.head
    recurse(
      item.spawnMoreItems ++ itemsToExamine.tail,
      acc.updatedFor(item))
  }
Run Code Online (Sandbox Code Playgroud)

如果这是合法的,那么为了在每次递归时分离头部和尾部,它肯定比转换SetSeq和返回更好.


*实际上,它说"选择第一个项目"和"选择除第一个项目之外的所有项目".我认为"选择"只是一个糟糕的选择.如果有理由说"选择"而不是"退货",请告诉我.

recursion scala scala-collections

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