标签: scheme

为什么代码为数据?

什么是代码作为数据?我听说它比"code-as-ascii-characters"要好,但为什么呢?我个人认为代码作为数据的哲学实际上有点令人困惑.

我已经涉足了Scheme,但我从来没有真正得到整个代码作为数据的东西,并想知道它究竟是什么意思?

lisp scheme coding-style common-lisp data-structures

37
推荐指数
6
解决办法
8371
查看次数

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

Guile 1.8.8在OS X的口译员中练习Scheme .我发现了一些有趣的东西.

这里的expt函数基本上是取幂的expt(b,n) = b^n:

 (define (square x) (* x x))
 (define (even? x) (= (remainder x 2) 0))
 (define (expt b n) 
      (cond ((= n 0) 1)
        ((even? n) (square (expt b (/ n 2))))
        (else (* b (expt b (- n 1))))
      ))
Run Code Online (Sandbox Code Playgroud)

如果我尝试一些输入

 > (expt 2 10)
 1024
 > (expt 2 63)
 9223372036854775808
Run Code Online (Sandbox Code Playgroud)

这是一个奇怪的部分:

 > (expt 2 64)
 0
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,直到n=488它停留在0:

 > (expt 2 487)
 0 …
Run Code Online (Sandbox Code Playgroud)

scheme guile mit-scheme

37
推荐指数
2
解决办法
6018
查看次数

阴阳拼图是如何运作的?

我正在尝试在Scheme中掌握call/cc的语义,并且关于continuation的Wikipedia页面以阴阳拼图为例:

(let* ((yin
         ((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
       (yang
         ((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))) )
    (yin yang))
Run Code Online (Sandbox Code Playgroud)

它应该输出@*@**@***@****@...,但我不明白为什么; 我希望它输出@*@*********......

有人可以详细解释为什么阴阳拼图的工作方式有效吗?

scheme callcc

34
推荐指数
4
解决办法
5044
查看次数

哪个Scheme IDE有?

我正计划学习Scheme(通过跟随 SICP),然后用这种语言做一个项目.但是,我想知道什么是一个好的IDE呢?我看了一下,但除了叫做埃德温的东西之外,我找不到很多东西?

lisp ide scheme

34
推荐指数
2
解决办法
2万
查看次数

为什么Clojure的父亲说Scheme的真/假被打破了?

在这段视频中,Rich Hickey为Lisp程序员介绍了Clojure.

在时间01:10:42,他在Clojure/Common Lisp/Scheme/Java中讨论了nil/false/end-of-sequence /'().他说:"计划是真实的,但它们是破碎的."

滑动

我不明白他为什么这么说,为什么他认为它"破碎"了?

null scheme clojure common-lisp

34
推荐指数
2
解决办法
2796
查看次数

适用于Windows的Scheme IDE

什么是适合Windows的好IDE?好的,我会承认的; 我不是RMS的级别,并且不想使用Emacs或任何基于字符的界面 - 我想要一个带有着色的图形IDE,一个REPL,以及一个特定的,有良好记录的方言的可用的在线帮助计划.我已经四处寻找,PLT Scheme/DrScheme似乎是最好的,但即使这看起来也不太复杂.

ide scheme

33
推荐指数
4
解决办法
3万
查看次数

Lisp中1和1之间有什么区别?

我从来没有真正想过一个符号是否可以成为Lisp中的数字,所以我今天玩弄了它:

> '1
1
> (+ '1 '1)
2
> (+ '1 1)
2
> (define a '1)
> (+ a 1)
2
Run Code Online (Sandbox Code Playgroud)

上面的代码是scheme,但它在Common Lisp和Clojure中看起来大致相同. 是否有1,并引述1之间有什么区别?

lisp scheme clojure common-lisp quote

33
推荐指数
4
解决办法
3810
查看次数

"The Little Schemer"中的Y组合讨论

因此,我花了很多时间阅读并重新阅读The Little Schemer中第9章的结尾,其中应用Y组合器是为该length功能开发的.我认为我的困惑归结为一个单独的声明,对比两个版本的长度(在组合器被分解之前):

A:
  ((lambda (mk-length)
     (mk-length mk-length))
   (lambda (mk-length)
     (lambda (l)
       (cond
         ((null? l) 0 )
         (else (add1
                ((mk-length mk-length)
                 (cdr l))))))))

B:
((lambda (mk-length)
      (mk-length mk-length))
    (lambda (mk-length)
      ((lambda (length)
         (lambda (l)
           (cond
             ((null? l) 0)
             (else (add1 (length (cdr l)))))))
       (mk-length mk-length))))
Run Code Online (Sandbox Code Playgroud)

第170页(第4版)指出A.

当我们将它应用于参数时返回一个函数

而B

不返回功能

从而产生自我应用的无限回归.我很难过.如果B受到这个问题的困扰,我不知道A如何避免它.

scheme combinators y-combinator the-little-schemer

33
推荐指数
2
解决办法
3955
查看次数

引号和列表有什么区别?

我知道你可以使用'(aka quote)创建一个列表,我一直都在使用它,如下所示:

> (car '(1 2 3))
1
Run Code Online (Sandbox Code Playgroud)

但它并不总是像我期望的那样工作.例如,我试图创建一个函数列表,像这样,但它不起作用:

> (define math-fns '(+ - * /))
> (map (lambda (fn) (fn 1)) math-fns)
application: not a procedure;
  expected a procedure that can be applied to arguments
  given: '+
Run Code Online (Sandbox Code Playgroud)

当我使用时list,它的工作原理:

> (define math-fns (list + - * /))
> (map (lambda (fn) (fn 1)) math-fns)
'(1 -1 1 1)
Run Code Online (Sandbox Code Playgroud)

为什么?我认为'这只是一个方便的速记,为什么行为不同?

evaluation scheme racket quote

33
推荐指数
2
解决办法
8009
查看次数

您将使用哪种语言进行SICP的自学?

我抓住了学习函数式编程的bug.所以我的下一个自学项目是通过计算机程序结构和解释.不幸的是,我从未学过Lisp,因为我不是大学的CS专业.

虽然SICP并不强调编程工具,但是练习需要选择一种类似Lisp的语言.似乎Scheme的一些实现将是阻力最小的路径.另一方面,我听说有人使用过Common LispClojure.在我看来,Common Lisp或Clojure更有可能在生产代码中使用,因此我的简历稍微好一点.顺便说一下,我完全认为学习语言本身就是值得的,但学习一种帮助我简历的语言仍然是一个好处.我是资本家,也是关于我学习的学者.

如果你不得不自学SICP,你会选择哪种语言?为什么?理想情况下,我想使用可以在JVM上运行的语言.我当然可以使用REPL与bash和emacs一起工作的语言.

附加:有没有人试过不使用Scheme阅读SICP?如果是这样,你的经历是什么样的?

lisp scheme functional-programming clojure sicp

32
推荐指数
4
解决办法
7193
查看次数