我试图理解语言水平的概念(规则,上下文无关,上下文敏感等)。 我可以很容易地看到这个,但是我发现的所有解释都是一堆符号和谈论集合 。 我有两个问题: 你能用文字来描述常规语言是什么,以及语言有何不同? 人们在哪里学会了解这些东西? 据我所知,这是正式的math? 我在uni使用过几门课程,几乎没有人知道这是因为我们知道的导师。 我在哪里可以学到这些知识,为什么人们“期望”能够从众多来源中了解它呢? 就好像教育上有差距 这是一个例子 : 属于这个集合的任何语言都是字母表上的常规语言。 一个语言如何能“超越”任何东西?
我已经一次又一次地听到了,我正试图理解和validationFP和OO是正交的。 首先,两个概念是正交的意味着什么? FP鼓励尽可能的不变性和纯洁性,而OO似乎是为了状态和变异而build立的 – 一个稍微有组织的命令式编程版本? 我意识到对象可以是不可改变的,但是OO似乎意味着对我的状态/改变。 他们看起来像对立面。 这如何影响它们的正交性? 像Scala这样的语言可以很容易地做OO和FP,这是否会影响两种方法的正交性?
我的一个朋友有一天问我,如果我在编程时只是看数字列表,或者它是如何工作的。 我试图解释说,它通常更像是math公式,用单数的英文单词扔,而且它通常大部分是可读的。 但这是一个非常模糊的解释,对于一个非程序员来说,这并没有太多的解释。 但是这让我想起了什么才是最好的例子。 不是因为我想教她的编程或其他任何东西,而只是为了给她一个程序代码“看起来像”的概念。 这让我想知道什么可以成为一个很好的例子。 而这是令人惊讶的困难。 我的第一个想法显然是一个简单的“Hello World”程序。 但它确实没有显示任何有用的东西。 它并没有真正显示我们如何使用函数或variables,或者像if或while一样控制stream程结构来创build一个真正做某事的程序。 没有逻辑。 该程序不会对任何事情做出反应。 所以也许像计算素数这样的东西就是一个更好的例子。 但是再一次,这可能太理论化,不切实际…(这有什么好处呢?写“真正的”程序又有什么关系呢?)另外,它里面没有重要的控制stream逻辑。 这只是一连串的math。 还有,应该使用哪种语言? 理想情况下,我不认为它必须是一个非常“干净”的语言。 相反,它应该可能使结构清晰。 如果是这样,那么一定数量的噪音和混乱可能会很好。 也许像C ++这样的东西实际上比Python更好的例子。 明确的大括号和types说明符是明显的“钩子”,可以帮助解释程序是如何构造的,或者强调它不仅仅是简单的语句,几乎可以作为英语读出来。 但是用C ++我们也陷入了一些奇怪的语法。 为什么std::cout << x用来打印x? 为什么不是一个“正常”的函数调用语法? 和printf是不是更好,与其神秘的格式string,并缺乏可扩展性(我想通过使用char*的string复杂化程序或我使用std::string和解决调用看似不必要的s.c_str()得到一个可以用printf打印的string? 也许更高层次的语言毕竟会更好。 但是哪一个? 为什么? 我知道这里有很多类似的问题,用来教授编程的语言/示例程序。 但我认为这里的要求是不同的。 在编程教学时,我们比任何东西都要简单。 我们想要避免任何尚未教过的东西。 我们要确保学生能够理解屏幕上的所有内容 。 我对简单本身不感兴趣。 而是给“外人”一个“程序看起来像什么”的概念。 而程序并不简单。 但是他们一般都performance出一定的疯狂结构和方法。 什么语言/程序最能突出显示? 编辑 感谢所有的build议。 你们中的一些人有一个不同的angular度比我的意图。 也许一个例子是为了。 我不能驾驶飞机,但是我已经对驾驶舱的外观有了基本的了解,以及驾驶员在飞行时“做了些什么”。 而且我不是一个训练有素的木匠,但是当我看到一个木匠时,我就会认识一把锯子或一把锤子。 但是,当看到电影编程的任何事情时,例如,通常只是充满垃圾的屏幕(如Matrix中的绿色文本)。 它看起来不像一个正常人能够做的事情 。 没有什么可以识别的。 某个不是程序员的人只是认为这是黑魔法。 […]
在阅读了关于这个主题的一些资料之后,我仍然不确定编译语言和解释语言之间的区别是什么。 我被告知这是Java和JavaScript之间的区别之一。 请有人帮助我理解它吗?
你真的“试过”(意味着编程,而不只是读一篇文章)Erlang,并决定反对它的一个项目? 如果是这样,为什么? 此外,如果您select回到您的旧语言,或者使用F#,Haskell,Clojure,Scala或其他function语言,那么这也是非常重要的,并说明原因。
我是斯蒂芬·沃尔夫勒姆(Stephen Wolfram)的忠实粉丝,但是他绝对不会害羞。 在许多参考文献中,他将Mathematica作为一种不同的符号编程范例来颂扬。 我不是Mathematica用户。 我的问题是:这是什么符号编程? 它和function语言(如Haskell)相比如何?
空合并翻译大致return x, unless it is null, in which case return y return null if x is null, otherwise return xy我经常需要return null if x is null, otherwise return xy 我可以使用return x == null ? null : xy; return x == null ? null : xy; 不错,但是中间的null位总是困扰我 – 看起来是多余的。 我宁愿像return x :: xy; ,只有在它之前的内容不为null才会评估::内容。 我认为这几乎是一个空合并的反面,这种混合与简洁,行内空检查,但我[ 几乎 ]确定在C#中没有这样的运算符。 […]
我一直在研究configuration文件和它们之间的关系,现在编码一段时间,取决于风的日子和方向,我的意见似乎改变了。 我越来越多地回到我刚刚学习Lisp的时候,数据和代码之间几乎没有区别。 这对于configuration文件来说似乎更加真实。 当在正确的光照下看Perl脚本只是一个perl的configuration文件。 这对于诸如QA和劳动分工这样的任务往往具有相当严重的后果,比如谁应该负责更改configuration文件。 从configuration文件到完全成熟的语言的蠕变通常是缓慢的,并且似乎由具有通用系统的愿望驱动。 大多数项目似乎都是从less量configuration项开始的,比如在哪里写日志,在哪里查找数据,用户名和密码等等。但随后他们开始增长:function开始能够打开或closures,操作的时间和顺序开始被控制,并且不可避免地有人想要开始添加逻辑(例如,如果机器是X,则使用10,如果机器是Y,则使用15。 在某一点上,configuration文件成为一个领域特定的语言,并写在一个不好的。 现在我已经漫步上台了,这里是我的问题: 什么是configuration文件的真正目的? 应该试图保持configuration文件简单吗? 谁应该负责对其进行更改(开发人员,用户,pipe理员等)? 他们是否应该被源代码控制(见问题3)? 正如我刚才所说,我对这些问题的答案不断变化,但现在我在想: 允许非程序员快速改变大块的行为 是的,任何不是粗粒度的应该在代码中 用户应该对configuration文件负责,程序员应该负责configuration文件和代码之间的configuration层,以便对应用程序进行更精细的控制 不,但更细的中间层应该是
在我读过的各种文章中,有时会提到基本的数据types,有时还会引用标量。 我对每一个的理解是,它们是像int,boolean,char等简单的数据types。 有什么我失踪,这意味着你应该使用特定的术语,或者只是可以互换的条款? 每个维基百科页面没有显示任何明显的。 如果条款是可以互换的,哪一个是首选的?
我在C语言中创build了一个编译器(使用lex&bison),用于支持循环,函数内部函数声明,recursion调用等的dynamictypes编程语言。我还创build了一个运行由编译器创build的中间代码的虚拟机。 我现在想的不是编译到我自己的中间代码,而是编译成java字节码。 我看到关于创build一个JVM语言的问题已经被问到,但我没有find答案非常丰富。 所以这是我的问题: 我想为JVM创build一种语言,一定要阅读JVM规范书,你还可以build议哪些其他的书(当然除了Dragon Book)? 我主要关心如何创buildJVM语言的书籍或教程,而不是一般的编译器。 有许多Java库可以读取,写入和更改.class文件,如jclasslib , bcel , gnu字节码等。您会build议哪一个? 另外,你是否知道做相同工作的C库? 我正在考虑看看另一种针对JVM的语言,比如Clojure,Jython或者JRuby。 但是所有这些语言都是非常高级和复杂的(为它们创build一个编译器)。 我正在寻找一个更简单的(我不介意如果它是未知的或未使用的)编程语言,目标的JVM和它的编译器是开源的。 有任何想法吗?