我在OS X的Guile 1.8.8口译员中练习Scheme。我注意到了一些有趣的东西。 这里的expt函数基本上是取幂expt(b,n) = b^n : (define (square x) (* xx)) (define (even? x) (= (remainder x 2) 0)) (define (expt bn) (cond ((= n 0) 1) ((even? n) (square (expt b (/ n 2)))) (else (* b (expt b (- n 1)))) )) 如果我尝试一些input > (expt 2 10) 1024 > (expt 2 63) […]
我正在编写一个用C语言编写的Scheme解释器。目前,它使用C运行时堆栈作为自己的堆栈,这在实现延续方面存在小问题。 我目前的解决scheme是将C堆栈手动复制到堆,然后在需要时将其复制回来。 除了不是标准的C,这个解决scheme并不理想。 在C中实现Scheme的延续最简单的方法是什么?
我对macros很感兴趣,刚开始明白它的真正的力量。 请帮助我收集macros观系统的一些很好的用法。 到目前为止,我有这些构造: 模式匹配: 安德鲁·怀特和布鲁斯·金巴。 计划的模式匹配,1995 序言精神中的关系: 多丽Sitaram。 在schelog中编程。 http://www.ccs.neu.edu/home/dorai/schelog/schelog.html Daniel P. Friedman,William E. Byrd和Oleg Kiselyov。 理性的策略。 MIT出版社,2005年7月 Matthias Felleisen。 将Prolog转换成Scheme。 1985年印第安纳大学技术报告。 可扩展的循环结构: 塞巴斯蒂安Egner。 在计划中的渴望理解:SRFI-42的devise。 计划和function编程研讨会,第13-26页,2005年9月。 奥林寒颤。 循环的解剖:范围和控制的故事。 在function规划国际会议上,第2-14页,2005。 class级系统: PLT。 PLT MzLib:库手册。 技术报告PLT-TR2006-4-v352,PLT Scheme Inc.,2006。http://www.plt-scheme.org/techreports/ Eli Barzilay。 骗取。 http://www.barzilay.org/Swindle 。 组件系统: 瑞安Culpepper,斯科特欧文斯和马修弗拉特。 组件接口中的语法抽象。 生成规划和组件工程国际会议,第373-388页,2005年 软件合同检查 马修·弗拉特(Matthew Flatt)和马提亚·费利森 单位:用于HOT语言的酷模块在ACM SIGPLAN会议上的编程语言devise和实现,第236-248页,1998 Oscar Waddell和R. Kent Dybvig。 扩展了句法抽象的范围。在编程语言原理研讨会上,第203-215页,第199页 […]
最近我已经更多地使用了Lisp和Lispy语言,而且我发现它们非常强大。 我一直在网上阅读的一件事是,在Lisp,Clojure等中编写的好处是你可以在程序运行时编辑你的程序。 也许我错过了什么,但是有什么意义呢? 当然,这可能会节省几秒钟,但所有? 每当我改变我的程序,我就停止它,然后再次启动,这已经好几十年了。 除了节省时间之外,还有一个原因 – 它是什么? 有人能给我一个很好的案例研究,会让我stream口水这个function吗? 🙂 期待stream口水!
我应该学习哪种Lisp(方言),为什么? CL和Scheme之间的碎片化速度减慢(至less对我来说!)。 所以,请给我“真实的答案”! 我试图阅读function比较,他们似乎陷入了深奥(我不完全理解),像方言是否完全尾recursion,等等。 我希望你们能够(统称)把不透明的差异弄清楚。 我喜欢的东西 良好的库支持,良好的环境和Unicode支持。 我不喜欢的东西 论战。 在开始时有用的function,但干扰长期学习。 更新 我一直在使用MzScheme,一旦我获得了readline支持,我很享受。 我不在Unix上运行GUI,所以对我来说这似乎是一个很好的环境选项。 我也很高兴Clojure在debian上安装了一个易于安装的.deb软件包,所以玩起来容易多了。 这是一个很大的胜利。 尽pipe下面有些相当容易愤怒的敌意,但低进入门槛是一个胜利。 我喜欢被勺子。 在阅读了更多的SICP后 ,我更好地理解了尾recursion的问题。
我通常使用PHP,Ruby或Perl编写Web应用程序。 我开始研究Scheme,我想用这种语言来尝试一些Web项目。 但是我找不到这个最好的环境。 我正在寻找以下function: 获取请求参数的简单方法(如:get-get #key,get-post #key,get-cookie #key)。 Mysql访问。 HTML表单生成器,处理,validation器等 用于过滤用户input数据的帮助器(类似于htmlentities,用于放入查询的转义variables等)。 FLOSS。 和GNU / Linux友好。 所以,预先感谢所有答复。
我知道他们是同一种叫lisp的语言家族的方言,但究竟有什么不同呢? 如果可能的话,你能否给出一个概述,包括语法,特性,特性和资源等主题。
我刚刚开始觉得我对于在球拍和scheme中使用lambda有一个模糊的理解,当我在SICP中遇到以下“替代”缺陷和汽车的定义 (define (cons xy) (lambda (m) (mxy))) (define (car z) (z (lambda (pq) p))) (define (cdr z) (z (lambda (pq) q))) 对于我的生活,我只是不能parsing它们。 任何人都可以解释如何parsing或扩展这些对于新手来说是有意义的吗?
(define .. (lambda (start stop) (cond ((> (add1 start) stop) (quote ())) ((eq? (add1 start) stop) (sub1 stop)) (else (cons start (.. (add1 start) stop)))))) 我定义了一个简单的范围函数。 目的是为了 (.. 1 5) –> (1 2 3 4) 相反,一个奇怪的时期正在被添加到我的元组,我不知道为什么: (.. 1 5) –> (1 2 3 . 4) 我不明白为什么会这样。 任何帮助表示赞赏
我知道Lisp和Scheme程序员通常会说,除非严格需要,否则应该避免使用eval。 我已经看到几种编程语言的相同的build议,但我还没有看到一个明确的反对使用eval的参数列表。 我在哪里可以find使用eval的潜在问题的帐户? 例如,我知道过程编程中的GOTO问题(使程序不可读,难以维护,难以find安全问题等),但是我从来没有看到反对eval的论点。 有趣的是,反对GOTO的同样的论点应该是有效的反对延续,但是我看到Schemers,例如,不会说延续是“邪恶的” – 你应该小心使用它们。 他们更有可能使用eval而不是使用代码使用代码(据我所知 – 我可能是错的)。