Nelle lingue in stile Lisp, un elenco è generalmente definito come questo:
(list 1 2 3)
Ai fini di questa sfida, tutte le liste conterranno solo numeri interi positivi o altre liste. Tralasceremo anche la list
parola chiave all'inizio, quindi l'elenco apparirà così:
(1 2 3)
Possiamo ottenere il primo elemento di un elenco usando car
. Per esempio:
(car (1 2 3))
==> 1
E possiamo ottenere l'elenco originale con il primo elemento rimosso con cdr
:
(cdr (1 2 3))
==> (2 3)
Importante: cdr
restituirà sempre un elenco, anche se tale elenco avrebbe un singolo elemento:
(cdr (1 2))
==> (2)
(car (cdr (1 2)))
==> 2
Gli elenchi possono anche essere all'interno di altri elenchi:
(cdr (1 2 3 (4 5 6)))
==> (2 3 (4 5 6))
Scrivi un programma che restituisce il codice che utilizza car
e cdr
per restituire un certo numero intero in un elenco. Nel codice restituito dal programma, si può presumere che l'elenco sia archiviato l
, che il numero intero di destinazione si trovi l
da qualche parte e che tutti i numeri interi siano univoci.
Esempi:
Ingresso: (6 1 3) 3
Produzione: (car (cdr (cdr l)))
Ingresso: (4 5 (1 2 (7) 9 (10 8 14))) 8
Produzione: (car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))
Ingresso: (1 12 1992) 1
Produzione: (car l)
(1 2 3) 16
, dovremmo tornare ()
?
(1 2 3) 16
non verrà mai visualizzato.