Como faço para acrescentar uma lista no esquema?

Adicionar um elemento à cabeça de um alist (lista associativa) é bastante simples:

> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))

Anexar à cauda de uma lista é um pouco mais complicado. Depois de algumas experiências, produzi isto:

> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))

No entanto, parece-me que esta não é a solução idiomática. Então, como isso geralmente é feito no esquema? Ou isso é de fato o caminho?

0
adicionado editado
Visualizações: 1
Eu também sou;) Sério, não é tão estranho quanto parece; Apenas tem uma sintaxe engraçada. Depois de um tempo, você pára de notar a graça. Eu sou apenas hobby-hacking com esquema, mas eu quase me acostumei com isso já.
adicionado o autor troelskn, fonte
Eu estou admirado por pessoas que podem entender idiomas como Scheme
adicionado o autor Danimal, fonte

1 Respostas

O Common Lisp define uma função chamada ACONS exatamente para essa finalidade, onde

(acons key value alist)

é equivalente a:

(cons (cons key value) alist)

Isso sugere fortemente que simplesmente consistir em uma lista é idiomático. Note que isso significa duas coisas:

  1. Como as pesquisas geralmente são realizadas de frente para trás, as associações adicionadas recentemente têm precedência sobre as mais antigas. Isso pode ser usado para uma implementação ingênua de ambientes lexicais e dinâmicos.
  2. Embora o consing em uma lista seja O (1), o acréscimo é geralmente O (n) onde n é o tamanho da lista, portanto o uso idiomático é melhor para o desempenho, além de ser estilisticamente preferível.
0
adicionado