小编Mat*_*t J的帖子

Haskell尾递归如何工作?

我写了这段代码,我假设len是尾递归,但仍然会发生堆栈溢出.怎么了?

myLength :: [a] -> Integer

myLength xs = len xs 0
    where len [] l = l
          len (x:xs) l = len xs (l+1)

main = print $ myLength [1..10000000]
Run Code Online (Sandbox Code Playgroud)

haskell tail-recursion

48
推荐指数
2
解决办法
9282
查看次数

Verilog中的花括号是什么意思?

我很难理解verilog中的以下语法:

input [15:0] a;  // 16-bit input
output [31:0] result; // 32-bit output
assign result = {{16{a[15]}}, {a[15:0]}};
Run Code Online (Sandbox Code Playgroud)

我知道assign声明会result使用连线和组合逻辑将某些东西连接到总线,但是花括号和16 {a [15]}是什么?

verilog concatenation

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

"类型安全"和"强类型"是否意味着同样的事情?

"类型安全"和"强类型"是否意味着同样的事情?

c# types

29
推荐指数
1
解决办法
8705
查看次数

在具有连续重构的项目上使用git/mercurial?

我想知道我是否真的有任何使用git/mercurial的情况.

我工作的项目是java和c#项目,通常有5-20人为共同目标("发布")而努力.大部分的开发商是专业的开发谁重构代码,所有的时间.因此,典型的Linux内核在单独的文件中有大量相对独立的更改,我们有不断变化的重构 - 通常会遇到大量文件和大量代码.没有人害怕在这里改变代码.

现在有了颠覆,我们通过非常接近SVN HEAD来解决这个问题.我们中的一些人甚至在构建服务器的jabber广播上触发了自动svn up.我们大多数人也学会了(或者很快学会)如何规划我们的工作以保持与SVN HEAD的接近.如果你正在进行一次重大的重构,我们会逐步将源树弯曲到新的方向,而不是消失太久.有时您只是计划重构操作并在较少竞争的区域开始.经过这么多年的工作,它成为第二天性.我们大多数人从不离开距离svn头不到2小时的"舒适区".自动构建和svn头是项目"脉冲",我们喜欢它.

当然,我们分支每个版本,但从发布分支回到主干的后退数量迅速减少到足以使其无关紧要(我们已经获得了不错的测试覆盖率).与源的私人分支一起运行数天/周听起来像我们积极想要阻止的事情,并且它不会经常发生.

git和mercurial声音都很酷,git略微更多,因为我更像是McGyver类型而不是James Bond类型.但是当谈到建立实际转换的案例时,感觉就像Linus和我生活在两个不同的星球上.大多数时候,我们希望我们的团队专注于HEAD.

GIT如何让我的版本控制更好?GIT如何让我改进我的流程?我是颠覆恐龙吗?

git version-control refactoring

20
推荐指数
2
解决办法
1758
查看次数

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

在c#中的开关中使用'is'关键字

我目前正在为此代码添加一些新的扩展类:

foreach (BaseType b in CollectionOfExtendedTypes) {
  if (b is ExtendedType1) {
    ((ExtendedType1) b).foo = this;

  }
  else if (b is ExtendedType2) {
    ((ExtenedType2) b).foo = this;

  } 
  else {
    b.foo = this;

  }
}
Run Code Online (Sandbox Code Playgroud)

并且好奇是否有办法is在switch语句中使用关键字功能?

c# switch-statement

17
推荐指数
3
解决办法
1万
查看次数

在Ruby中,我应该使用|| =还是定义?记忆?

我应该用吗? if defined?

 return @current_user_session if defined?(@current_user_session)
 @current_user_session = UserSession.find
Run Code Online (Sandbox Code Playgroud)

要么 ||=

@current_user_session ||= UserSession.find
Run Code Online (Sandbox Code Playgroud)

我注意到if defined?最近使用的方法越来越多.一个人对另一个人有什么好处吗?就个人而言,我更喜欢||=可读性.我也认为Rails可能有一个memoize透明地提供这种行为的宏.是这样的吗?

ruby ruby-on-rails memoization

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

将非专业介绍给HTML /编程的最佳方法是什么?

在过去的几个月里,我一直在吃着以下问题.在见证了这里的回复质量后,我希望我能在这里得到一些很好的回应.

我正在ECE部门开设一门名为" 探索数字信息技术 "的课程,旨在让非专业人士了解整个"计算机如何工作"的事情.作为计算机体系结构的研究生,不仅我的主题背景与学生大不相同(他们中的许多人都是除了Word和YouTube之外没有计算机经验的新生),但我的整个思维方式似乎根本不同.之前我已经取得了很大的成功,更多的技术课程,学生们没有必要的确切材料的背景,但他们是细节导向的,技术头脑的人,他们喜欢变量,数组,索引等事情,间接,功能等.我有一个extroardinarily 课程第一单元的困难时期,主要涵盖HTML,JavaScript和Internet(网络拓扑,IP地址等)

我对SO社区的问题很多,但我会从几个开始:

  • 在最高级别,如果你试图教别人如何像程序员一样思考(将人类级别的算法分解为可以转换为函数,过程语句,if-then-else语句和循环的简单步骤), HTML和JavaScript是你的方法吗?这比其他方法更快地给出了可关联的结果(例如,做有用事情的网页),但是HTML和JavaScript的分离和集成,以及整个"声明性HTML与程序性JavaScript交谈"的事情似乎太多了抽象概念太快了.

  • 如果你是想教HTML和JS的初学者(有人谁有困难想算法),你会用什么样的资源,你会指定哪些项目,等等?我发现即使我for尽可能地将概念分解为循环,它仍然有点多.是否有某个地方从第一原则开始,可以真正帮助一个真正的初学者grok为什么括号和分号是必要的,函数的哪些参数是等等?

老实说我还有很多问题,但我认为这是一个很好的起点.我期待着将你的成果编译成一些东西,不仅可以用于本课程的未来迭代,还可以用于我个人的"技术布道"追求.我在这里阅读了另一篇"如何教初学者做X"的问题,但他们似乎针对的是一个完全不同的"初学者"类:那些数学思维且对学习编程非常感兴趣的人,但是不知道从哪里开始.我觉得这个小组的答案与那些思维方式不同的人有很大的不同,而且学习的内在动力可能更少.

html javascript

12
推荐指数
2
解决办法
1058
查看次数

我应该使用哪种算法进行信号(声音)一类分类?

更新此问题以前标题为" 给我一个简单的信号(声音)模式检测算法的名称 "

  1. 我的目标是在嘈杂的信号中检测给定模式的存在.我想检测一种用麦克风录制声音的昆虫种类.我以前用数字格式记录了昆虫的声音.
  2. 我不是想做语音识别.
  3. 我已经在输入信号和模式之间使用卷积来确定它们的相似性水平.但我认为这种技术更适合于离散时间(即数字通信,其中信号以固定间隔发生)并且在两个给定模式之间区分输入信号(我只有一种模式).
  4. 我害怕使用神经网络,因为我从来没有使用它们,我不知道我是否可以嵌入那些代码.

你能否指点一些其他的方法,或试着说服我,我目前的方法仍然是一个好主意或神经网络可能是一种可行的方式?

更新我已经有2个好的答案,但另一个会受到欢迎,甚至奖励.

algorithm audio pattern-recognition signal-processing pattern-matching

12
推荐指数
1
解决办法
5546
查看次数

GCC:程序不适用于编译选项-O3

当我用优化(选项-O1,-O2,-O3等)编译它时,我正在编写一个不起作用的C++程序(我遇到了分段错误),但是当我编译它时它工作得很好优化.

我的代码中是否有错误的可能性?或者我应该假设这是GCC中的错误?

我的GCC版本是3.4.6.

这种问题有没有已知的解决方法?

我的程序的优化和未优化版本之间的速度差异很大,所以我真的需要使用优化.


这是我原来的算子.没有优化级别的工作正常,并且在任何优化级别都会引发分段错误:

struct distanceToPointSort{
    indexedDocument* point ;
    distanceToPointSort(indexedDocument* p): point(p) {}
    bool operator() (indexedDocument* p1,indexedDocument* p2){
        return distance(point,p1) < distance(point,p2) ;
    }
} ;
Run Code Online (Sandbox Code Playgroud)

并且这个可以完美地适用于任何级别的优化:

struct distanceToPointSort{
    indexedDocument* point ;
    distanceToPointSort(indexedDocument* p): point(p) {}
    bool operator() (indexedDocument* p1,indexedDocument* p2){

        float d1=distance(point,p1) ;
        float d2=distance(point,p2) ;

        std::cout << "" ;  //without this line, I get a segmentation fault anyways

        return d1 < d2 ;
    }
} ;
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个问题难以重现,因为它发生了一些特定的值.我在对超过一千个向量中的一个进行排序时得到了分段错误,所以它实际上取决于每个向量具有的特定值组合.

c++ gcc compilation

9
推荐指数
5
解决办法
7094
查看次数