标签: theory

盲人程序员有哪些优秀的计算机科学资源?

我是一个完全盲目的人,想要更多地了解计算机科学的理论方面.我有一个介绍数据结构类和一般的介绍编程,但想了解更多关于软件设计,高级数据结构和编译器设计等内容.我想这样做是一门自学课程而不是大学课程的一部分.

不幸的是,从盲人录音和诵读困难中获取计算机科学的教科书并不多,我通常会收到我的教科书.我将不胜感激任何可以帮助我获得更多计算机科学教育的电子资源,而不是许多编程网站似乎关注的最新语言或平台.

theory computer-science accessibility

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

Monad理论和Haskell

大多数教程似乎提供了很多monad(IO,状态,列表等)的例子,然后期望读者能够抽象出整体原则,然后他们提到类别理论.通过尝试从例子中进行概括,我不会学得很好,我想从理论的角度理解为什么这种模式如此重要.

从这个线索来看: 任何人都可以解释Monads吗? 这是一个常见的问题,我已经尝试查看大多数建议的教程(除了我的linux机器上不能播放的Brian Beck视频):

有没有人知道从类别理论开始的教程,并用这些术语解释IO,状态,列表monad?以下是我未能成功的尝试:

据我所知,monad包含一个三元组:一个endo-functor和两个自然变换.

仿函数通常显示类型:(a - > b) - >(ma - > mb)我包括第二个括号只是为了强调对称性.

但是,这是一个endofunctor,所以域和codomain不应该像这样吗?:

(a - > b) - >(a - > b)

我认为答案是域和codomain都有一种类型:

(a - > b)| (ma - > mb)| (mma - > mmb)等......

但我不确定这是否有效或符合给定的仿函数的定义?

当我们继续进行自然变革时,它会变得更糟.如果我理解正确,自然变换是二阶函子(具有某些规则),它是从一个仿函数到另一个仿函数的仿函数.因为我们已经定义了上面的仿函数,一般类型的自然变换将是:((a - > b) - >(ma - > mb)) - >((a - > b) - >(ma - > mb ))

但是我们使用的实际自然变换有类型:

a - > ma

ma - >(a - > mb) - > mb

这些一般形式的子集是否在上面?为什么它们会自然变换?

马丁

theory monads haskell types

35
推荐指数
4
解决办法
2890
查看次数

我从哪里开始学习图像处理和对象识别?

我有兴趣编写一些基本的计算机化对象识别应用程序,所以我想我需要一些图像处理算法的理论背景,以及一些用于决策能力的AI.

我是计算机科学专业的毕业生,有一天我打算获得硕士学位,希望能够进入这些领域.与此同时,我想先行一步,做一些自学.

所以我的问题是,我从哪里开始?我很欣赏正确方向的箭头,如果可能的话,还有一些链接.

theory image-processing computer-vision object-recognition

34
推荐指数
3
解决办法
2万
查看次数

RegEx引擎如何工作

在学习正则表达式时,我想知道底层引擎是如何工作的.可能更具体地说,我想更多地了解它如何评估,优先考虑和解析表达.我觉得RegEx引擎对我来说是一个黑盒子,我真的很喜欢破译它.

所以我想问一下,在讨论RegEx引擎理论时是否有一些我可以阅读的优秀资源.

*注意:我对构建引擎不感兴趣,只是学习引擎的内部工作原理.

regex theory

34
推荐指数
1
解决办法
8014
查看次数

"Flat比嵌套好" - 对于数据和代码?

这个问题让我思考:我们应该将"扁平比嵌套更好"的原则应用于数据还是代码?即使数据存在"逻辑树结构"?

在这种情况下,我认为这意味着将子代表作为ID列表,而不是实际的子列表,其中所有节点都在一个列表中:

[ {'id': 4, 'children': ()},
  {'id': 2, 'children': (1, 7)},
  {'id': 1, 'children': (6, 5)},
  {'id': 6, 'children': ()},
  {'id': 5, 'children': ()},
  {'id': 7, 'children': (3,)},
  {'id': 3, 'children': ()} ]
Run Code Online (Sandbox Code Playgroud)

(我使用了元组,因为我不愿意给自己灵活地改变一个对象,直到这种灵活性证明它本身是有用的并且可以以清晰的方式使用.无论如何我永远不会None在这里使用而不是空序列,因为它使得复杂化逻辑,"特殊情况不够特别" - 在这里,它并不特别.)

当然这个更短,但树形结构模糊不清.这是否与"明确胜过隐性"相矛盾?

就个人而言,我发现"扁平比嵌套更好"的适用性有限,并且远不及禅宗最重要的方面.(当然,如果我不允许自己进行重要的嵌套,我无法做很多很好的函数式编程工作.)我怀疑"嵌套"的问题是当你理解信息时它需要上下文切换.我真的认为在遵循命令式逻辑时比解析数据或函数式代码更容易出问题 - 在这里更容易精神上命名嵌套块,并将其工作与外部上下文分开考虑.

怎么说你?

python theory

34
推荐指数
4
解决办法
8867
查看次数

是否发现两个函数的等价性是不可判定的?

难道不知道两个函数是否相同吗?例如,编译器编写者想要确定开发人员编写的两个函数是否执行相同的操作,可以使用哪些方法来确定那个函数?或者我们可以做些什么来找出两个TM是相同的?有没有办法规范机器?

编辑:如果一般情况是不可判定的,在正确地说两个函数是等价的之前,您需要多少信息?

theory compiler-construction math computer-science function

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

LiftM可以与liftA不同吗?

根据Typeclassopedia(以及其他来源),Applicative逻辑上属于类型层次结构之间MonadPointed(因此Functor),所以如果今天编写Haskell前奏,我们理想情况下会有这样的东西:

class Functor f where
    fmap :: (a -> b) -> f a -> f b

class Functor f => Pointed f where
    pure :: a -> f a

class Pointed f => Applicative f where
    (<*>) :: f (a -> b) -> f a -> f b

class Applicative m => Monad m where
    -- either the traditional bind operation
    (>>=) :: (m a) -> (a -> m b) …
Run Code Online (Sandbox Code Playgroud)

theory haskell typeclass category-theory

30
推荐指数
2
解决办法
2330
查看次数

解释数据*结构*和数据*类型之间的区别*

试图回答复合数据类型和数据结构之间的区别是什么?我意识到虽然我清楚地知道数据类型什么,以及它与数据结构的不同之处,但我无法将其区分为单词.如果您正在教授入门CS课程,您会如何解释其中的差异?

language-agnostic theory data-structures

30
推荐指数
2
解决办法
4万
查看次数

Model-View-Presenter中的Presenter是否会创建视图?

如何在MVP中创建视图?Presenter是否始终创建它们(除了子视图的视图外)?或者它是一个单独的第三方组件或应用程序或创建它们的东西?

我们还要补充一点,我可能会在Dojo Toolkit/ExtJS(即JavaScript)上执行此操作.

所以,我有这些代码行:

var v = new MyApp.view.User();
var p = new MyApp.presenter.User();
Run Code Online (Sandbox Code Playgroud)

这两条线应该在哪里准确?演示者是否实例化视图,反之亦然?什么实例化第一个实例?

theory mvp architectural-patterns

30
推荐指数
2
解决办法
8119
查看次数

代码运用lambda演算的每个边缘的独特可能性

我无法解释lambda立方体这个术语比维基百科更好:

[...]λ-cube是一个框架,用于探索Coquand构造计算中的细化轴,从简单类型的lambda演算开始,作为放置在原点的立方体的顶点,以及构造的微积分(更高阶)依赖型多态lambda演算作为其完全相反的顶点.立方体的每个轴代表一种新的抽象形式:

  • 术语取决于类型或多态性.系统F,又名二阶lambda演算,仅通过强加此属性获得.
  • 类型取决于类型或类型运算符.简单地键入lambda-calculus与类型运算符λω,只通过强加此属性获得.与系统F结合,产生系统Fω.
  • 类型取决于术语或依赖类型.仅施加此属性会产生λΠ,这是一种与LF密切相关的类型系统.

所有八个计算都包括最基本的抽象形式,术语取决于术语,普通函数与简单类型的lambda演算一样.立方体中最富有的微积分,包括所有三个抽象,是结构的微积分.所有八个结石都强烈正常化.

是否有可能在Java,Scala,Haskell,Agda,Coq等语言中找到代码示例,以便在缺少此优化的结石中无法实现每个细化?

language-agnostic theory types scala lambda-calculus

30
推荐指数
1
解决办法
891
查看次数