Converter lista de 2 itens em um par pontilhado?

7

P: como posso converter uma lista de 2 itens em uma conscélula de par pontilhado ?

Posso converter uma lista de 2 itens em um par pontilhado com:

(let ((list '(1 2)))
  (cons (car list) (cadr list)))        ; => (1 . 2)

Estou apagando: existe uma função interna que faz isso ou devo executar a minha própria?

Dan
fonte
5
Plugue sem vergonha: sugerir é ótimo em casos como este. Coloque sua entrada como '(1 2), sua saída como '(1 . 2)e ela sugerirá (apply #'cons '(1 2))para você!
Wilfred Hughes

Respostas:

11

consfaz uma célula contras com dois argumentos. applyusa uma lista como argumentos para uma função. Quando seus poderes se combinam: (apply #'cons x)converte uma lista de dois elementos em uma célula de contras (sem ter que bisbilhotar dentro da lista) e gera um erro se a lista não for longa.

erikstokes
fonte
É impressionante como isso é mais conciso e inclui o tratamento adequado de erros.
Daniel Jour