.己知三对角矩阵 A的每个元素占 2 个单元,现将其三条对角线上的元素逐行存储在起始地址为 1000的连续的内存单元中,则元素 A[7,8]的地址为()
答案算出来是1038,不是1040吗,
(1)CAR(CDR(((a,b),(c,d),(e,f))))
(2)CDR(CAR(((a,b),(c,d),(e,f))))
(3)CAR(CDR(CAR(((a,b),(e,f)))))
(4)CDR(CAR(CDR(((a,b),(e,f)))))
(5)CDR(CDR(CAR(((a,b),(e,f)))))
注:CAR 运算相当于有些教材中的 Head 运算,CDR 运算相当于 Tail 运算。
解析(1)(c,d) (2)(b) (3)b (4)(f) (5)()
第一个,它tail不是空表吗,还有第四个
对于第一个问题,如果三对角矩阵 A 的每个元素占 2 个单元,并将其三条对角线上的元素逐行存储在起始地址为 1000 的连续内存单元中,则元素 A[7,8] 的地址应该是 1038,而不是 1040。因为 A[7,8] 在第 4 行、第 5 列,前面有 4 行、4 列共 8 个元素,每个元素占 2 个单元,因此地址为 1000 + 8 * 2 + 4 * 2 * 2 = 1038。
对于第二个问题,CAR(CDR(((a,b),(c,d),(e,f)))) 的运算过程如下:
(a,b),(c,d),(e,f) 中 CDR 取出第 2 个元素 (c,d),得到 ((c,d),(e,f))
对 ((c,d),(e,f)) 进行 CAR 运算,取出第 1 个元素 c,得到结果 b
因此,CAR(CDR(((a,b),(c,d),(e,f)))) 的结果是 b。
对于第三个问题,CAR(CDR(CAR(((a,b),(e,f))))) 的运算过程如下:
((a,b),(e,f)) 中 CAR 取出第 1 个元素 (a,b),得到 (a,b)
对 (a,b) 进行 CDR 运算,得到空表 ()
因此,CAR(CDR(CAR(((a,b),(e,f))))) 的结果是空表 ()。
对于第四个问题,CDR(CAR(CDR(((a,b),(e,f)))) 的运算过程如下:
((a,b),(e,f)) 中 CDR 取出第 2 个元素 (e,f),得到 ((e,f))
对 ((e,f)) 进行 CAR 运算,取出第 1 个元素 e,得到结果 e
因此,CDR(CAR(CDR(((a,b),(e,f))))) 的结果是 e。
对于第五个问题,CDR(CDR(CAR(((a,b),(e,f)))) 的运算过程如下:
((a,b),(e,f)) 中 CAR 取出第 1 个元素 (a,b),得到 (a,b)
对 (a,b) 进行 CDR 运算,得到空表 ()
对空表 () 再进行 CDR 运算,仍然得到空表 ()
因此,CDR(CDR(CAR(((a,b),(e,f))))) 的结果是空表 ()。