标签: scheme

什么是最好的Scheme解释器或编译器?

大家好,我想开始使用Scheme,我有两个问题.首先,您是否建议使用Scheme的解释器或编译器?为什么?第二,你会推荐哪种解释器或编译器,为什么?谢谢!

scheme

45
推荐指数
5
解决办法
5万
查看次数

Slime for Scheme最接近的是什么?

我在Common Lisp中完成了大部分的开发工作,但是有些时候我想切换到Scheme(在Small Pieces中读取Lisp,当我想要使用continuation时,或者当我想在Gauche中执行一些脚本编写时,例).在这种情况下,我不舒服的主要原因是我没有史莱姆(是的,你可以称我为瘾君子).

Scheme最接近史莱姆的是什么?具体来说,我最感兴趣的是:

  • Emacs集成(这一点很明显;))
  • 体面的选项卡完成(理想情况下,cwcc TAB应扩展为call-with-current-continuation).它甚至可以是基于符号表的(即,它不必注意我在a let中定义的函数).
  • 迷你缓冲区中的函数参数提示(如果我已键入(map |)(光标位置由|)表示),我想(map predicate . lists)在迷你缓冲区中看到
  • 将表格发送给口译员
  • 与调试器集成.

我已经通过降低重要性来命令这些功能.

我的Scheme实现选择是:

  • 的MzScheme
  • 的Ikarus
  • 左岸
  • 中的bigloo

如果它至少与它们一起工作会很棒.

lisp emacs scheme common-lisp slime

44
推荐指数
7
解决办法
1万
查看次数

有没有人使用Scheme编程语言谋生?

我开始学习方案乐趣,如果有人使用它为生活作为主要编程语言...甚至作为一个额外的工具,编程库不知道?如果是这样,你用它做什么?你通常用什么样的问题来解决它?

scheme programming-languages

44
推荐指数
5
解决办法
3万
查看次数

功能编程:什么是"不正确的列表"?

有人可以解释什么是"不正确的清单"吗?

注意:谢谢大家!你们所有人摇滚!

lisp erlang scheme functional-programming

44
推荐指数
4
解决办法
8950
查看次数

为什么在Racket中以奇怪的方式定义foldl?

在Haskell中,与许多其他函数语言一样,函数foldl被定义为例如foldl (-) 0 [1,2,3,4] = -10.

这没关系,因为foldl (-) 0 [1, 2,3,4]根据定义,((((0 - 1) - 2) - 3) - 4).

但是,在Racket中,(foldl - 0 '(1 2 3 4))是2,因为Racket"智能地"计算如下:(4 - (3 - (2 - (1 - 0)))),确实是2.

当然,如果我们定义辅助功能翻转,像这样:

(define (flip bin-fn)
  (lambda (x y)
    (bin-fn y x)))
Run Code Online (Sandbox Code Playgroud)

然后我们可以在Racket中实现与Haskell相同的行为:而不是(foldl - 0 '(1 2 3 4))我们可以写:(foldl (flip -) 0 '(1 2 3 4))

问题是:为什么foldl球拍以这种奇怪的(非标准的,非直观的)方式定义,与其他语言不同?

recursion scheme functional-programming fold racket

44
推荐指数
4
解决办法
8345
查看次数

帮助理解Scheme中的Continuations

我和The Little Schemer一起工作,学习Scheme并在我的环境中使用PLT-Scheme.

Little Schemer对递归给了我很大的帮助(现在对我来说很简单)但是我仍然坚持介绍"收藏家"这本书的一部分,并将整个函数称为一个延续.

这是他们使用的示例代码.我理解递归元素但是我被卡住了,特别是在lambda函数上 - 我的思想不能遵循路径以及如何设置lambda函数的参数(因为他们唯一的调用是在递归中再次调用它们,有功能体内没有具体用途).

如果有人能够或多或少地通过将函数递归到lambda收集器来分解计算路径,那可能对我有所帮助.

;; Build a nested list of even numbers by removing the odd ones from its
;; argument and simultaneously multiply the even numbers and sum the odd
;; numbers that occur in its argument.
(define (even-only-collector l col)
  (cond
    ((null? l)
      (col (quote ()) 1 0))
    ((atom? (car l))
      (cond
        ((even? (car l))
          (even-only-collector (cdr l)
            (lambda (newl p s)
              (col (cons (car l) newl)
                (* (car l) …
Run Code Online (Sandbox Code Playgroud)

lisp scheme continuations the-little-schemer racket

43
推荐指数
1
解决办法
3087
查看次数

定义,设置和设置之间的区别!

好吧,这是一个相当基本的问题:我下面的SICP视频,我有点困惑之间的差异define,letset!.

1)根据视频中的Sussman,define允许只附加一次值(在REPL中除外),特别是不允许两行定义.然而,Guile愉快地运行了这段代码

(define a 1)
(define a 2)
(write a)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样输出2.事情有点复杂,因为如果我尝试这样做(编辑:在上述定义之后)

(define a (1+ a))
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,而

(set! a (1+ a))
Run Code Online (Sandbox Code Playgroud)

被允许.我仍然不认为这是set!define我之间的唯一区别:我错过了什么?

2)definelet我之间的区别更让我困惑.我知道理论上let用于绑定局部范围内的变量.尽管如此,在我看来,这也是一样的define,例如我可以替换

(define (f x)
    (let ((a 1))
        (+ a x)))
Run Code Online (Sandbox Code Playgroud)

(define (g x)
    (define a 1)
    (+ a x))
Run Code Online (Sandbox Code Playgroud)

fg工作相同:在特定的变量a是未结合的外面g为好.

我可以看到这个有用的唯一方法是let可能具有整个函数定义的更短范围.在我看来,总是可以添加一个匿名函数来创建必要的范围,并立即调用它,就像在javascript中一样.那么,真正的优势是let什么?

scheme

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

如何使用MIT-Scheme执行.scm脚本(在REPL之外)?

我想键入类似'scheme file.scm'的内容并让它解释文件,然后将我带回我的shell,而不是将其加载到REPL中.

编辑:我尝试了scheme <test.scm,它仍然使用REPL,唯一的区别是当流结束时方案退出.

scheme mit-scheme

39
推荐指数
3
解决办法
1万
查看次数

为什么在llvm上没有一个好的方案/ lisp?

有Gambit计划,麻省理工学院计划,PLT计划,鸡计划,Bigloo,Larceny,......; 然后有所有的lisps.

然而,就我所知,LLVM上没有(据我所知)一个流行的方案/ lisp,即使LLVM提供了很多很好的东西,比如:

  • 比x86更容易生成代码
  • 容易做出C FFI调用......

那么为什么LLVM上没有一个好的方案/ lisp呢?

lisp scheme llvm

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

什么是lisp/scheme中的符号?

为了全能的爱,我还没有理解符号的目的'iamasymbol.我理解数字,布尔值,字符串...变量.但是符号对于我的小思维思维来说太过分了.我究竟用它做什么用的?它们应该如何在程序中使用?我对这个概念的把握只是失败了.

lisp scheme racket

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