In Python the data structure looks like this: [([1 2 3], [8 9 10])]
(a list of tuple, where tuple is of size 2, and each tuple element is a list again)
How would I represent the same in Scheme r5rs?
This is what I tried: (list (cons `(1 2 3) `(8 9 10)))
But running (display (list (cons `(1 2 3) `(8 9 10))))
gives (((1 2 3) 8 9 10))
whereas I want (((1 2 3) (8 9 10)))
Edit
Using only lists (as per @Will Ness answer here):
(list ; a pair of elements,
(list 1 2 3) ; 1 each is itself
(list 8 9 10))) ; 2 a list
works.
And I can access the 2nd element of the tuple by
(cadr (car x))
which gives (8 9 10)
(which is correct)
I was just thinking how would I build this up using cons
since my tuple will only contain 2 elements and from what I know cons
are used to represent a pair in Scheme. Any ideas on how to do this using cons
?
[([1 2 3], [8 9 10])]
(a list of tuple, where tuple is of size 2, and each tuple element is a list again)
(list ; a list of
(list ; a pair of elements,
(list 1 2 3) ; 1 each is itself
(list 8 9 10))) ; 2 a list
Scheme is untyped, so we can just use lists for tuples. It is simpler that way -- the access is uniform. The first is car
, the second cadr
.
Your way is correct as well. What really determines whether it is or not is how you can access your data to retrieve its constituents back. And with your way you can indeed, too: the first element will be car
and the second -- cdr
.
(update to the question edit:) whether you use (cons 1 (cons 2 '()))
or (list 1 2)
is immaterial. the resulting structure in memory is the same.