2011-09-16 25 views
6

我是一名新计划/球拍学生,请原谅任何明显的语法错误。Scheme:奇怪返回的三个虚线元素列表(如中缀运算符?)

它今天上课想出了这个计划列表'(a, b, c)应该是无效的,但是当我们运行它,它返回:

>'(a . b . c) 
(b a c) 

这是没有意义的。 Afaik,口译员应该用汽车'a和cdr'b创建一个cons cell,'c应该是无效的。也就是说,解释者在这里做了一些非常奇怪的事情。这适用于#lang方案,#lang球拍等。我们使用DrRacket作为解释器。

有趣的是,

>'(a . b . c . d) 

抛出异常和死亡。

我很好奇,希望能够理解这一点,因为我是新手语言。谷歌是非常无益的(可能因为搜索条件有点模糊)谢谢!

编辑: 这可能是因为'(a . b . c)被解释为b作为中缀运算符。例如:>(4 . + . 6)返回10.也许解释器使用b就像操作符一样?即(b a c),如(+ 4 6),并入。

Expermentation说:

>(define b +) 
>(define a 4) 
>(define c 6) 
>(a . b . c) 
10 

所以我觉得这个问题解决了,但我还是不完全了解使用的“”在这种情况下运营商。我想我们已经解决了这个问题,但更多的见解将不胜感激!

+0

操作员两边的小圆点让我想起了Fortran:1.LT。 3 – JasonFruit

回答

8

简答:你明白了。有关球拍特定使用点的更多信息,请参阅球拍文档中infix的文档。

4

这是Racket读者的特色。 (请参阅John的回答。)

对于其他实现,您可以改为使用readable S-expressions阅读器读取中缀表达式。它使用大括号。例如{3 + 4}被读入为(+ 3 4)。更特别的(比Racket的infix阅读器),你可以使用{3 + 4 + 5}{3 + 4 + 5 + 6};他们将分别读作(+ 3 4 5)(+ 3 4 5 6)

+1

另请参阅可读S-exps for Racket的此实现:http://planet.racket-lang.org/display.ss?package=sweet.plt&owner=asumu –