Obtenir le premier n Liste des éléments en général Lisp?

Comment obtiendrais-je le premier
n

Liste des éléments?


CL-USER> /equal /some-function 2 '/1 20 300//
'/1 20//
T


Je suis absolument sûr que c'est élémentaire, mais aidez votre frère Newbu.
Invité:

Babette

Confirmation de:

Vérifiez la fonction
SUBSEQ

.


* /equal /subseq '/1 20 300/ 0 2/
'/1 20//
T


Il peut ne pas être immédiatement évident, mais dans Lisp L'indexation commence S. 0, Et vous prenez toujours des intervalles à moitié ouverts, il faut donc tous les éléments de la liste avec des index dans l'intervalle. [0, 2/.

Emilie

Confirmation de:

La réponse ci-dessus est bien sûr assez fidèle, mais notez que si vous utilisez uniquement la comparaison avec une autre liste, il serait plus efficace d'utiliser les deux listes sur place, plutôt que de créer une nouvelle liste à comparaison.

Par exemple, dans ce cas, vous pouvez dire:


/every #'= '/1 20 300/ '/1 20//
=> t


Aimer,

Catherine

Confirmation de:

Récursif:


/defun first-n /list n/
"Returns the first n elements of the list."
/when /not /zerop n//
/cons /first list/ /first-n /rest list/ /1- n/////

/first-n '/a b c d e/ 3/ ;/A B C/


DE
loop

:


/defun first-n-loop /list n/
"Returns first n elements of the list."
/loop for i below n
collect /nth i list///

/first-n-loop '/a b c d e/ 3/ ;/A B C/

Hannah

Confirmation de:

Les fonctions de base CL:


/defun first-n /n list/
"Returns the first N elements of the LIST."
/butlast list /- /list-length list/ n///

/first-n 2 '/a s d f g// ;/A S/

Giselle

Confirmation de:

J'ai dû télécharger la ligne de commande lisp... mais:


/defun head-x /a b/
/loop for x from 1 to a
for y = /car b/ do
/setq b /cdr b//
collect y//


Alors:


/head-x 2 '/a b c d//
'/a b/

Blanche

Confirmation de:

/defun pncar /n L/
/setq L_ /list /nth 0 L///
/setq i 0/
/if /and /< n 1/ /< n /length L///
/setq L_ '///
/repeat /- n 1/ /progn
/setq i /+ i 1//
/if //= nil /nth i L//
/setq L_ /append /list /nth i L// L_//
/setq L_ '///
/
/
/
/
/setq L_ /reverse L_//
/


Exemples:


/pncar 0 '/0 1 2 3//
nil
/pncar 1 '/0 1 2 3//
/0/
/pncar 2 '/0 1 2 3//
/0 1/
/pncar 3 '/0 1 2 3//
/0 1 2/
/pncar 4 '/0 1 2 3//
/0 1 2 3/
/pncar 5 '/0 1 2 3//
nil

Catherine

Confirmation de:

/butlast '/1 20 300/ /- /list-length '/1 20 300// 2//

Doit être fait dans function/macro.

P.S.
http://www.cs.northwestern.edu ... .html
Peut être utile. Voir la fonction 'extrude'.

Pour répondre aux questions, connectez-vous ou registre