Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme Petite Chez方案(线程化)这两个列表之间的区别是什么?_Scheme_Chez Scheme - Fatal编程技术网

Scheme Petite Chez方案(线程化)这两个列表之间的区别是什么?

Scheme Petite Chez方案(线程化)这两个列表之间的区别是什么?,scheme,chez-scheme,Scheme,Chez Scheme,在小Chez方案中(螺纹)。我定义了两个名为myq和myqq的列表 (define make-queue (lambda () (let ((end (cons 'ignored '()))) (cons end end)))) (define myqq (make-queue)) (define myq '((ignored) ignored)) ;this shows myq and myqq are equal (display (equal? my

在小Chez方案中(螺纹)。我定义了两个名为myq和myqq的列表

(define make-queue 
  (lambda () 
    (let ((end (cons 'ignored '()))) 
      (cons end end)))) 

(define myqq (make-queue)) 
(define myq '((ignored) ignored)) 

;this shows myq and myqq are equal
(display (equal? myqq myq)) 
(newline) 

;test myqq
(display myqq) 
(newline) 
(set-car! (cdr myqq) 'b) 
(display myqq) 
(newline) 

;test myq
(display myq) 
(newline) 
(set-car! (cdr myq) 'b) 
(display myq) 
(newline) 
结果是:

#t 
((ignored) ignored) 
((b) b) 
((ignored) ignored) 
((ignored) b) 
我的问题是:作为

(display (equal? myqq myq)) 
显示myq和myqq相等。为什么使用相同的命令:

(set-car! (cdr myqq) 'b) 
(set-car! (cdr myq) 'b) 
导致不同的结果?
另外,我不知道为什么
(set car!(cdr myqq)'b
会导致
((b)b)
。我认为这应该会导致
((忽略)b)
,因为我们从不更换myqq的车

生成队列的结果是一个由两个cons单元组成的结构,而不是三个:

  • 一个cons单元格分别在
    汽车
    cdr
    中包含被忽略的
    ()
  • 另一个cons单元包含到其
    car
    cdr
    中的第一个cons单元的链接
当您执行
(设置汽车!(cdr myqq)'b)
时,您正在将第一个cons单元的
汽车
忽略
更改为
b

equal?
递归检查对和类似结构,最终将
eqv?
应用于基本值(在您的示例中是符号)。它没有考虑到在
myqq
中不同组件之间存在结构共享这一事实,而对于
myq
,这并不是一个相关的差异

equal?
并不是平等的最终定义,它只是两个结构可以相等的一种特殊意义(通常是有用的)。您可以使用其他比较函数查看两种结构之间的差异,例如:

>>> (eq? (car myqq) (cdr myqq))
#t 
>>> (eq? (car myq) (cdr myq))
#f 

make queue
的结果是一个由两个cons单元格组成的结构,而不是三个:

  • 一个cons单元格分别在
    汽车
    cdr
    中包含被忽略的
    ()
  • 另一个cons单元包含到其
    car
    cdr
    中的第一个cons单元的链接
当您执行
(设置汽车!(cdr myqq)'b)
时,您正在将第一个cons单元的
汽车
忽略
更改为
b

equal?
递归检查对和类似结构,最终将
eqv?
应用于基本值(在您的示例中是符号)。它没有考虑到在
myqq
中不同组件之间存在结构共享这一事实,而对于
myq
,这并不是一个相关的差异

equal?
并不是平等的最终定义,它只是两个结构可以相等的一种特殊意义(通常是有用的)。您可以使用其他比较函数查看两种结构之间的差异,例如:

>>> (eq? (car myqq) (cdr myqq))
#t 
>>> (eq? (car myq) (cdr myq))
#f 

make queue
的结果是一个由两个cons单元格组成的结构,而不是三个:

  • 一个cons单元格分别在
    汽车
    cdr
    中包含被忽略的
    ()
  • 另一个cons单元包含到其
    car
    cdr
    中的第一个cons单元的链接
当您执行
(设置汽车!(cdr myqq)'b)
时,您正在将第一个cons单元的
汽车
忽略
更改为
b

equal?
递归检查对和类似结构,最终将
eqv?
应用于基本值(在您的示例中是符号)。它没有考虑到在
myqq
中不同组件之间存在结构共享这一事实,而对于
myq
,这并不是一个相关的差异

equal?
并不是平等的最终定义,它只是两个结构可以相等的一种特殊意义(通常是有用的)。您可以使用其他比较函数查看两种结构之间的差异,例如:

>>> (eq? (car myqq) (cdr myqq))
#t 
>>> (eq? (car myq) (cdr myq))
#f 

make queue
的结果是一个由两个cons单元格组成的结构,而不是三个:

  • 一个cons单元格分别在
    汽车
    cdr
    中包含被忽略的
    ()
  • 另一个cons单元包含到其
    car
    cdr
    中的第一个cons单元的链接
当您执行
(设置汽车!(cdr myqq)'b)
时,您正在将第一个cons单元的
汽车
忽略
更改为
b

equal?
递归检查对和类似结构,最终将
eqv?
应用于基本值(在您的示例中是符号)。它没有考虑到在
myqq
中不同组件之间存在结构共享这一事实,而对于
myq
,这并不是一个相关的差异

equal?
并不是平等的最终定义,它只是两个结构可以相等的一种特殊意义(通常是有用的)。您可以使用其他比较函数查看两种结构之间的差异,例如:

>>> (eq? (car myqq) (cdr myqq))
#t 
>>> (eq? (car myq) (cdr myq))
#f 

平等?并不意味着完全相同。基本上相等的问题是这两件事有价值吗?如果是的话,它们是一样的吗?如果它们是值列表,那么这些列表中的每个元素是否与对应的列表具有相同的值

 (define example 'ignored) 
 (equal? 'ignored example) -> #t  
 (set! example 'b) 
 (equal? 'ignored example) -> #f 
这是有道理的,对吗

这与cons单元格是一对指针这一事实有关

定义
myqq
时,将名称
end
绑定到值'ignored',该值在内部是一个符号,与指向某个内存位置的指针关联,该值为'ignored'。当返回
myqq
的值时,它是指向一对的名称,这对是两个指针,都指向end指针指向的同一个位置<代码>设置cdrc