我试图理解PLT-Scheme 372中对,缺点,虚线元组和正确列表之间的关系.我的问题的详细背景如下:
在阅读了一些教科书并进行反复试验后,我得到了以下理解和直观的想法(我可能错了......):
所有列表都是对,例如:
(pair? (list 'a 'b 'c)) => #t
所有的意思都是成对的,例如:
(pair? (cons 'a (cons 'b 'c))) => #t
一些以点分隔的元组是成对的,例如:
(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) 我试图定义一个像'(()())这样的数据结构初始化函数,这样我以后就可以生成很多.
在我定义它之后,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)