Scheme中的pair和Python中的tuple有什么区别?

0 投票
2 回答
1474 浏览
提问于 2025-04-17 14:00

在Scheme语言中,如果你有一个包含成对元素的列表,比如:

((4 . 7) (4 . 9))

这不就是一个包含两个元素的元组的列表吗?那么如果你想用Python来写,这会是:

[[4, 7], [4, 9]] 还是 [(4, 7), (4, 9)] 呢?

我希望它能尽量接近Python的写法。或者说,创建一个类会更接近吗?

2 个回答

0

在Scheme语言中的pair和Python中的tuple之间有很多不同之处。比如,tuple是不可变的,也就是说一旦创建就不能改变,而pair则可以改变。此外,当pair不是一对值时,它会返回0,而tuple即使只有一个值(比如(x,))也能正常使用,还有很多其他的区别。

想了解更多,可以看看这些链接:Python的元组Scheme的对

:)

2

在Scheme语言中,把一对元素称作二元组其实是不太合适的,因为这会让人觉得Scheme里还有三元组或四元组,但实际上并没有。

不过,Python中最接近Scheme中一对元素的概念确实是二元组。一个包含多个对的列表和一个包含多个列表的列表是完全不同的东西。

哦,对了,关于你标题里提到的问题:

在Scheme中,一个列表要么是空列表(()),要么是一个对,其中第二个元素是一个列表。所以每个列表都是一个对,但并不是所有的对都是列表。例如,(1 . (2 . ()))这个对是一个列表(通常写作(1 2)),但(1 . 2)这个对就不是列表,因为2不是一个列表。

这些内容在Python中并不适用。Python的列表是可扩展的数组,而不是由对或元组组成的链表。

撰写回答