C#开发人员-我尝试过Lisps,但我不明白。
经过几个月的关于Lisp,CL和Clojure的学习和使用,我仍然看不到有什么理由代替C#编写任何令人信服的理由。 我真的很想提出一些令人信服的理由,或者有人要指出我缺少的东西确实很大。 Lisp的优势(根据我的研究): 紧凑,富有表现力的符号-不仅是C#,是的...但是我似乎也可以用C#来表达那些想法。 对函数式编程的隐式支持-具有LINQ扩展方法的C#: mapcar = .Select(lambda) mapcan = .Select(lambda).Aggregate((a,b)=> a.Union(b)) 汽车/第一= .First() cdr / rest = .Skip(1)....等 Lambda和高阶函数支持-C#具有此功能,并且语法可以说更简单: “(lambda(x)(body))”与“ x =>(body)” Clojure中的“#(”与“%”,“%1”,“%2”很好 与对象分离的方法分派-C#通过扩展方法具有此功能 多方法分派-C#本身没有这种方法,但是我可以在几个小时内将其实现为函数调用 代码就是数据(和宏)-也许我没有“获得”宏,但是我没有看到一个不能将宏的概念实现为函数的示例。它不会改变“语言”,但我不确定这是一种优势 DSL-只能通过功能组合来实现...但是可以工作 无类型的“探索性”编程-对于结构/类,C#的自动属性和“对象”都可以很好地工作,并且您可以轻松地升级为更强大的类型 在非Windows硬件上运行-是吗?在大学以外,我只认识一个不在家中运行Windows或至少在* nix / Mac上运行Windows VM的人。(再说一次,也许这比我想像的要重要,我刚刚被洗脑了……) 自底向上设计的REPL-好的,我承认这确实非常好,我在C#中错过了它。 我在Lisp中缺少的东西(由于C#、. NET,Visual Studio,Resharper的混合使用): 命名空间。即使使用静态方法,我也喜欢将它们绑定到“类”以对它们的上下文进行分类(Clojure似乎有这个,CL似乎没有。) 强大的编译和设计时支持 类型系统允许我确定我传递的数据结构的“正确性” 拼写错误的内容会实时下划线;我不必等到运行时就知道 建议自动进行代码改进(例如使用FP方法代替命令式方法) GUI开发工具:WinForms和WPF(我知道Clojure可以访问Java GUI库,但是对我来说它们是完全陌生的。) GUI调试工具:断点,插入,逐步,值检查器(文本,xml,自定义),监视,按线程调试,条件断点,调用堆栈窗口,可以跳转到任意级别的代码在堆栈中 (为公平起见,我在Emacs + Slime方面的工作似乎提供了其中的一部分,但我偏爱VS GUI驱动的方法) …