为什么 cons 根据 S-expression 的位置给出不同的值
Why cons give a different value based on position of S-expression
所以如果我像这样写一个函数 add1
(define add1 (lambda (n)
(cons n (quote()) )))
(add1 '(()))
我的答案是 - '((()))
在另一个空列表中添加了一个空列表,不是我想要的答案
但是如果我将函数更改为
(define add1 (lambda (n)
(cons (quote()) n )))
先写 quote() 我得到
'(() ())
这就是我想要的,为什么在第一种情况下反对者在列表中添加了一个列表,而在第二种情况下又在列表旁边添加了一个列表?
(cons 42 (cons 69 (cons 613 '())))
是 (list 42 69 613)
在这里我们使用中级学生语言让我们轻松查看结果。
#lang htdp/isl
(quote ())
是 '()
而 '(())
是 (cons '() '())
.
#lang htdp/isl
; Intermediate Student languages
(equal? (quote ()) '())
(equal? '(()) (cons '() '()))
所以我们重写你的函数
#lang htdp/isl
; Intermediate Student languages
(define (f1 x)
(cons x '()))
(define (f2 x)
(cons '() x))
(define a (cons '() '()))
我们知道a
= (cons '() '())
= (list '())
.
(f1 a)
会做 (cons a '())
会输出 (list (list '()))
.
这样想你输入(cons "abc" '())
当然会得到(list "abc")
。所以 (cons a '())
会得到 (list a)
.
(cons '() '())
是 (list '())
所以当你 运行 (f2 a)
。就像 (cons 1 (list 2))
会得到 (list 1 2)
。它只是做 (cons '() (list '())
所以你会得到 (list '() '())
.
想象一下 (list 1 2)
和 (list 3 4)
和 (cons (list 1 2) (list 3 4))
网上有人这样解释list
。这真的没有意义。
更好的方法是像二叉树一样绘制list
。每个正确的分支必须是 list
.
所以如果我像这样写一个函数 add1
(define add1 (lambda (n)
(cons n (quote()) )))
(add1 '(()))
我的答案是 - '((()))
在另一个空列表中添加了一个空列表,不是我想要的答案
但是如果我将函数更改为
(define add1 (lambda (n)
(cons (quote()) n )))
先写 quote() 我得到
'(() ())
这就是我想要的,为什么在第一种情况下反对者在列表中添加了一个列表,而在第二种情况下又在列表旁边添加了一个列表?
(cons 42 (cons 69 (cons 613 '())))
是 (list 42 69 613)
在这里我们使用中级学生语言让我们轻松查看结果。
#lang htdp/isl
(quote ())
是 '()
而 '(())
是 (cons '() '())
.
#lang htdp/isl
; Intermediate Student languages
(equal? (quote ()) '())
(equal? '(()) (cons '() '()))
所以我们重写你的函数
#lang htdp/isl
; Intermediate Student languages
(define (f1 x)
(cons x '()))
(define (f2 x)
(cons '() x))
(define a (cons '() '()))
我们知道a
= (cons '() '())
= (list '())
.
(f1 a)
会做 (cons a '())
会输出 (list (list '()))
.
这样想你输入(cons "abc" '())
当然会得到(list "abc")
。所以 (cons a '())
会得到 (list a)
.
(cons '() '())
是 (list '())
所以当你 运行 (f2 a)
。就像 (cons 1 (list 2))
会得到 (list 1 2)
。它只是做 (cons '() (list '())
所以你会得到 (list '() '())
.
想象一下 (list 1 2)
和 (list 3 4)
和 (cons (list 1 2) (list 3 4))
网上有人这样解释list
。这真的没有意义。
更好的方法是像二叉树一样绘制list
。每个正确的分支必须是 list
.