Tag: 计划

Guile Scheme解释器中的奇异乘法行为

我在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很感兴趣,刚开始明白它的真正的力量。 请帮助我收集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?

我应该学习哪种Lisp(方言),为什么? CL和Scheme之间的碎片化速度减慢(至less对我来说!)。 所以,请给我“真实的答案”! 我试图阅读function比较,他们似乎陷入了深奥(我不完全理解),像方言是否完全尾recursion,等等。 我希望你们能够(统称)把不透明的差异弄清楚。 我喜欢的东西 良好的库支持,良好的环境和Unicode支持。 我不喜欢的东西 论战。 在开始时有用的function,但干扰长期学习。 更新 我一直在使用MzScheme,一旦我获得了readline支持,我很享受。 我不在Unix上运行GUI,所以对我来说这似乎是一个很好的环境选项。 我也很高兴Clojure在debian上安装了一个易于安装的.deb软件包,所以玩起来容易多了。 这是一个很大的胜利。 尽pipe下面有些相当容易愤怒的敌意,但低进入门槛是一个胜利。 我喜欢被勺子。 在阅读了更多的SICP后 ,我更好地理解了尾recursion的问题。

我如何使用Lisp或Scheme进行网页编程?

我通常使用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友好。 所以,预先感谢所有答复。

Clojure,Scheme / Racket和Common Lisp有什么区别?

我知道他们是同一种叫lisp的语言家族的方言,但究竟有什么不同呢? 如果可能的话,你能否给出一个概述,包括语法,特性,特性和资源等主题。

在SICP中使用lambda作为cons / car / cdr定义

我刚刚开始觉得我对于在球拍和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或扩展这些对于新手来说是有意义的吗?

Lisp中的recursion范围增加了一个句点?

(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) 我不明白为什么会这样。 任何帮助表示赞赏

为什么是eval邪恶?

我知道Lisp和Scheme程序员通常会说,除非严格需要,否则应该避免使用eval。 我已经看到几种编程语言的相同的build议,但我还没有看到一个明确的反对使用eval的参数列表。 我在哪里可以find使用eval的潜在问题的帐户? 例如,我知道过程编程中的GOTO问题(使程序不可读,难以维护,难以find安全问题等),但是我从来没有看到反对eval的论点。 有趣的是,反对GOTO的同样的论点应该是有效的反对延续,但是我看到Schemers,例如,不会说延续是“邪恶的” – 你应该小心使用它们。 他们更有可能使用eval而不是使用代码使用代码(据我所知 – 我可能是错的)。