Teste se a matriz está dentro de uma lista em lisp

Eu tenho dois itens. O primeiro, a-child , é uma lista que contém um array como seu primeiro elemento e depois algumas strings como os elementos restantes. O outro, mapped , é uma lista que contém vários arrays. Por inspeção, é fácil ver que a-child está mapped , embora eu não consiga encontrar uma function que a encontre para mim.

Peço desculpas pelo pobre estilo lisp abaixo – comecei há alguns dias, então ainda não peguei todas as convenções.

 (defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R")) (defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9))))) (find (car a-child) mapped) ;;returns NIL (member (car a-child) mapped) ;;returns NIL (position (car a-child) mapped) ;;returns NIL (equalp (car a-child) (car mapped)) ;;returns T 

Que function posso usar para procurar matrizes em uma lista de matrizes? Obrigado.

A resposta

Suas funções de seqüência marcadas como “retorna NIL” retornarão T se você passar :test #'equalp a elas.

O motivo

O teste padrão de dois argumentos no Common Lisp é eql .

É a escolha mais razoável entre as funções de comparação de propósito geral 4 (!) Fornecidas pelo padrão ANSI CL:

  • eq é muito dependente da implementação e não funciona como um provavelmente quer em números e caracteres

  • objects equal e equal atravessam objects e, portanto, levam muito tempo para os grandes e nunca podem terminar para os circulares.

Veja também a diferença entre eq, eql, equal e equalp no Common Lisp .