我已经开始学习计算机程序的结构和解释.尽职尽责,我已经安装了mit-scheme.我现在需要的是Mac的编辑器/ IDE,它可以处理缩进和平衡括号(或者如何最好地配置打包工具的建议).
有什么建议?TIA
我正在尝试使用Racket(以前的PLT Scheme)连接URL调度.我看了一下教程和服务器文档.我无法弄清楚如何将请求路由到相同的servlet.
具体例子:
#lang scheme (require web-server/servlet) (require web-server/dispatch) (provide/contract (start (request? . -> . response/c))) (define (start request) (blog-dispatch request)) (define-values (blog-dispatch blog-url) (dispatch-rules (("") list-posts) (("posts" (string-arg)) review-post) (("archive" (integer-arg) (integer-arg)) review-archive) (else list-posts))) (define (list-posts req) `(list-posts)) (define (review-post req p) `(review-post ,p)) (define (review-archive req y m) `(review-archive ,y ,m)) (require web-server/servlet-env) (serve/servlet start #:launch-browser? #t #:quit? #f #:listen-ip #f #:port 8080 #:extra-files-paths (list (build-path "js") (build-path "css")) #:servlet-path "")
假设上面的代码,localhost:8080/
转到一个写"list-posts"的页面.打算localhost:8080/posts/test
去球拍"未找到文件"页面(我希望它去一个页面,上面写着"审查,测试后").
感觉我错过了一些小而明显的东西.任何人都可以给我一个提示吗?
我想要一个命令行(必须是一个命令行!)read-eval-print-loop Scheme解释器.但从表面上看,我想要一个解释器,至少可以突出括号,甚至可能保留历史,如GNU readline启用的程序.所有这些都在REPL级别.
这存在吗?它甚至可能吗?我是否必须将其破解为一些开源的REPL?我只是擅长电脑吗?我应该打扰吗?
我已经检查了其他问题,但我还没有找到我正在寻找的东西.我已经尝试过Racket和mzscheme,但它似乎没有做我想要的.现在我正在使用mit-scheme,但是这种平衡功能(就像他们在SICP演讲中使用的任何程序一样)几乎都是我想要的.
这里似乎是我可以从我刚刚完成的如何设计程序(简化球拍)课程中获得的两件最重要的事情,直接来自课程的讲义:
1)尾部调用优化,以及非功能语言的缺乏:
可悲的是,大多数其他语言不支持TAIL CALL OPTIMIZATION.换句话说,即使是尾调用,它们也会构建堆栈.
尾调用优化是在70年代中期发明的,远在大多数语言的主要元素开发之后.因为它们没有尾调用优化,所以这些语言提供了一组固定的LOOPING CONSTRUCTS,可以遍历任意大小的数据.
a)在没有特色的过程语言中,这种类型的优化有哪些等价物?b)使用那些等价物是否意味着我们避免在类似情况下在没有它的语言中建立堆栈?
2)变异和多核处理器
这种机制几乎是你编程的任何其他语言的基础.我们推迟到目前为止推出它有几个原因:
尽管是基础,但它却非常复杂
过度使用它会导致程序无法并行化(在多个处理器上运行).由于多核计算机现在很常见,因此仅在需要时使用突变的能力变得越来越重要
过度使用变异也会使程序难以理解,难以很好地测试它们
但是可变变量很重要,学习这个机制将为您提供更多准备工作Java,Python和许多其他语言.即使在这些语言中,您也希望使用称为"主要是函数式编程"的样式.
在学习本课程之前,我学习了一些Java,Python和C++,因此认为变异是理所当然的.现在已经被上述声明全部抛到了空中.我的问题是:
a)我在哪里可以找到有关第二篇子弹中建议内容的更多详细信息,以及如何处理这些内容,以及b)"大多数功能性编程"风格会出现什么样的模式,而不是更粗心的风格我可能本来会继续使用其他语言而不是参加这门课程?
scheme functional-programming tail-recursion mutability racket
我目前在Mac OS X上使用DrRacket并选择语言"R5RS",但是当我进入时
(random 100)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
reference to undefined identifier: random
Run Code Online (Sandbox Code Playgroud)
这有什么问题?它是由缺少包裹引起的吗?
SICP第3.5.3章 http://mitpress.mit.edu/sicp/full-text/book/book-ZH-24.html#%_sec_3.5.3
在章节中Streams as signals
,SICP Implicit style of definition
通过反馈循环给出了视听说明.但我想知道如何准确理解图表?什么是真正的优势,是否有任何背景知识?
再举一个例子,不是在Scheme中,而是在Haskell中:
fibs = fix (scanl (+) 0 . (1:))
fibs = fix ((0:) . scanl (+) 1)
Run Code Online (Sandbox Code Playgroud)
我们还可以绘制两者的信号流图.我们如何利用这些图表?
感谢您的建议和信息!
我想为我的程序构建一个本地数据库,该数据库必须填充用户优先设置,搜索网站等.
但我在互联网上找到的东西(谷歌和这个网站)只是一个来自服务器或本地数据库的数据库,具有特定的方言,独特的球拍,这是所有方案方言中最受欢迎的.
以下是数据库的racket文档中的信息:
据我所知,没有关于使用带球拍的本地数据库的信息或示例.
任何人都可以给出一个小例子来构造和使用带有scheme(racket)的本地数据库吗?
你怎么得到一个printf %6.2f
计划或球拍,就像你在C?
现在我只有printf "The area of the disk is ~s\n" ( - d1 d2)
,但我不能将输出格式化为特定的浮点格式.
谢谢
CL和Scheme都定义(and)
了返回t
(或#t
)没有参数.
我试图理解这个的基本原理.我天真的假设是一个空集是假的,并且传入零参数感觉就像传递任何可能都是真的.
编辑:clojure遵循相同的约定.我必须缺少一些基本的Lisp假设.
我已经定义了一个结构如下,
(struct vector (x y z)
#:methods gen:custom-write
[(define (write-proc vector port mode)
(let ([print (if mode write display)])
(write-string "<")
(print (vector-x vector))
(write-string ", ")
(print (vector-y vector))
(write-string ", ")
(print (vector-z vector))
(write-string ">")))])
Run Code Online (Sandbox Code Playgroud)
但是我在REPL中得到了一个奇怪的行为,其中结构显示3次:
> (define a (vector 1 2 3))
> a
<1, 2, 3><1, 2, 3><1, 2, 3>
Run Code Online (Sandbox Code Playgroud)
我一定是做错了,但找不到我的问题.有人可以告诉我为什么我有3次输出?
scheme ×10
racket ×6
clojure ×1
command-line ×1
common-lisp ×1
database ×1
haskell ×1
implicit ×1
linux ×1
lisp ×1
macos ×1
mutability ×1
sicp ×1
sqlite ×1
stream ×1
unix ×1
url-routing ×1
webserver ×1