Tag: 理论

Monad理论和Haskell

大多数教程似乎给了monads(IO,状态,列表等等)的很多例子,然后期望读者能够抽象出整体原理,然后他们提到类别理论。 我并不倾向于通过从例子中泛化来学习,我想从理论的angular度来理解为什么这个模式如此重要。 从这个线程判断: 任何人都可以解释Monads? 这是一个常见的问题,我已经尝试了大部分的教程(除了Brian Beckvideo,不会在我的Linux机器上播放): 有没有人知道从类别理论开始的教程,并解释IO,状态,列表monad这些条款? 以下是我不成功的尝试: 据我所知,一个monad包含一个三元组:一个内部函子和两个自然转换。 函子通常用types表示:(a – > b) – >(ma – > mb)为了强调对称性,我包含了第二个括号。 但是,这是一个pipe理者的终结,所以不应该像这样的域和共域吗? (a→b)→(a→b) 我认为答案是域和共域都有一个types: (a – > b)| (ma – > mb)| (mma – > mmb)等等… 但是我不确定这是否符合给定函子的定义? 当我们转向自然变革时,情况会变得更糟。 如果我理解正确的话,一个自然变换就是一个二次仿函数(具有一定的规则),它是一个仿函数的仿函数。 因此,由于我们已经定义了上面的函子,所以自然变换的一般types是:(a→b)→(ma→mb)→→(a→b)→ma→mb )) 但是我们正在使用的实际的自然转换有types: a – > ma ma – >(a – > mb) – > mb 上述一般forms的这些子集? 为什么他们是自然的转变? 马丁

什么是图灵机?

什么是图灵机,为什么人们不断提及它? 我的IBM个人电脑是所有我需要做我的计算! 为什么有人关心这些机器?

什么是拉链数据结构,我应该使用它?

问题很简单:我无法理解Zipper数据结构。 我的问题是关于它与树的使用。 我想了解如何使用拉链更改树节点。 而如何不复制整个树(或大部分)。 请澄清,如果我错了拉链。 也许它不能帮助树更新? 或者,也许,有可能更新树,我只是不能看到的方式?

用户级和内核支持的线程之间的区别?

我一直在研究基于这个主题的一些笔记,尽pipe我对线程有一般的理解,但我并不确定用户级和内核级线程之间的区别 。 我知道进程基本上是由多个线程或单个线程组成的,但这两个前面提到的types的线程是什么? 据我所知,内核支持的线程可以访问系统调用的内核,而用户级线程则不能使用其他用途。 那么,当用户级线程是由程序员创build的线程时,是否使用内核支持的线程来执行由于其状态而无法正常执行的操作?

平滑价值随着时间的推移:移动平均或更好的东西?

我正在编写一些东西,我正在从一个硬件指南针随着时间的推移一堆价值。 这个指南针是非常准确的,经常更新,结果是,如果它轻微抖动,我会得到与其邻居大不相同的奇数值。 我想要平滑这些价值观。 经过一些阅读,看来我想要的是高通滤波器,低通滤波器或移动平均。 移动平均数我可以记住,只是保留最后5个值的历史logging,或者在我刚刚使用最近值的代码中使用这些值的平均值。 我认为,这应该很好地消除这些抖动,但是这让我觉得这可能是效率很低的,这可能是适合程序员的已知问题之一,其中有一个巧妙的math解决scheme。 然而,我是那些可怕的自学成才的程序员之一,没有任何与CompSci或Math相关的正规教育。 仔细阅读,可以看出这可能是高通滤波器或低通滤波器,但是我找不到任何可以用像我这样的黑客理解的东西来解释这些algorithm对一系列值的影响,更不用说如何math作品。 例如, 在这里给出的答案在技术上确实回答了我的问题,但仅仅是对那些可能已经知道如何解决问题的人来说是可理解的。 这真是一个非常可爱,聪明的人,他可以用这个问题来解释这个问题,以及这个解决scheme是如何工作的。

什么是模糊逻辑?

我在学校使用了几个AIalgorithm,我发现人们使用Fuzzy Logic这个词来解释他们可以解决的情况。 当我回到书籍上时,我只是读了一下,而不是一个从“开”到“关”的状态,这是一条对angular线,在两个状态中,可以是不同的“等级”。 我已阅读维基百科条目和几个教程,甚至编程的东西,“使用模糊逻辑”(边缘检测器和单轮自控机器人),我仍然发现从理论到代码非常混乱。对你来说,在较不复杂的定义中,什么是模糊逻辑?

文本编辑原理

由于我总是对现有的编辑不满意,我一直想开始的一个项目就是我自己的文本编辑器。 不过,做文本编辑是很重要的事情。 除了分析现有文本编辑器的源代码之外,有没有关于这个主题的任何书籍或其他资源(如学术工作)? 我特别感兴趣的东西,教如何处理内存和如何pipe理文本插入(如果你有一个100 MB的文件,并希望在X位置添加一个字符,你不能只是巨大的文本块memmove … )。

“closures”和“块”之间究竟有什么区别?

我发现很多人可以互换地使用闭包和块 。 这些人大多不能解释他们在说什么。 一些Java程序员(甚至是来自非常昂贵的咨询公司的人)都会将匿名内部类作为“块”和“闭包”进行讨论 – 但我知道这不是事实。 (你不能在它们被定义的方法范围内传递可变variables…) 我在找: 一个精确的,计算机科学的块定义 一个精确的计算机科学的封闭定义 并澄清两者的区别 。 我真的很希望看到这些链接,文章或书籍参考 。

为什么康威的人生游戏可以归类为通用机器?

我最近读到人造的生活,并且遇到了这样的说法: “康威的生命游戏显示出足够的复杂性,被归类为一个通用机器。 我只是对通用机器有一个粗略的了解,而维基百科只是给了我和维基百科一样接近理解。 我想知道有没有人可以对这个非常性感的陈述提出一些看法? 对我来说, 康威的生命游戏似乎是一个可爱的分心,带来了一些巨大的影响:我不能在这个和计算器之间做出跳跃吗? 那即使是我应该做的飞跃?

空algorithmO(0)的时间复杂度是多less?

所以给了以下程序: 这个程序的时间复杂度是O(0)吗? 换句话说,是0 O(0)? 我想在另外一个问题上回答这个问题会让我们看到这个问题 。 编辑:很多好的答案在这里! 我们都同意0是O(1)。 问题是,也是0 O(0)?