小编pim*_*eek的帖子

为什么'(a.b.c)在PLT-Scheme 372中评估为(bac)?

我试图理解PLT-Scheme 372中,缺点,虚线元组正确列表之间的关系.我的问题的详细背景如下:

在阅读了一些教科书并进行反复试验后,我得到了以下理解和直观的想法(我可能错了......):

  1. 所有列表都是对,例如:

    (pair? (list 'a 'b 'c)) => #t

  2. 所有的意思都是成对的,例如:

    (pair? (cons 'a (cons 'b 'c))) => #t

  3. 一些以点分隔的元组是成对的,例如:

    (pair? '(a . b)) => #t
    (pair? '(a . b . c)) => #t 在标准R5RS中,它不是合法的语法.

然后我遇到了这个问题:为什么'(a.b.c)评价为(bac)?我在哪里可以找到完整的dot使用手册?

'(a . b)                => (a . b)   
'(a . b . c)            => (b a c)
'(a . b . c . d)        => illegal use of `.'
'(cons 'a …
Run Code Online (Sandbox Code Playgroud)

syntax scheme list racket

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

我怎么能解释我的Scheme代码的这种意外行为?

我试图定义一个像'(()())这样的数据结构初始化函数,这样我以后就可以生成很多.

在我定义它之后,init函数可以正常工作.但是在我使用set-car之后!在(let*...)函数调用中,(init)的行为发生了变化.

我的问题是如何解释这种行为?

; define init func
(define (init)
  (display "initializing goal space...")
  (newline)
  '(() ())
  )

; call init func
(init)

; use set-car! in (let* ...)
(let*
    ((x (init)))
  (display x)
  (newline)
  (set-car! x (list 'foo))
  (display x)
  (newline)
  )

; call init func again
(init)
Run Code Online (Sandbox Code Playgroud)

DrScheme中的输出日志,lang = Textual(MzScheme,包括R5RS)

Welcome to DrScheme, version 372 [3m].
Language: Textual (MzScheme, includes R5RS).
initializing goal space...
(() ())
initializing goal space...
(() ())
((foo) ())
initializing goal space...
((foo) ())
> 
Run Code Online (Sandbox Code Playgroud)

scheme

0
推荐指数
1
解决办法
92
查看次数

标签 统计

scheme ×2

list ×1

racket ×1

syntax ×1