Re: Codice fiscale

#73251
Up
0
Down
::

robitex” post=72343Magari si potrebbe cominciare da un esempio di programmazione LaTeX3 da mettere nella Gallery del sito.

Vediamo; nel codice si usano tre strutture base di LaTeX3:

• token list
• sequence
• property list

Si tratta di tre tipi di contenitori di dati, che hanno impieghi diversi per via di come sono strutturati.

• Una “token list” non ha alcuna struttura, a parte quella naturale dell’ordine dei token che la compongono. Una macro definita come [tt]\def\xyz{testo}[/tt] è esattamente una token list.

• Una “sequence” è una collezione di token list ordinata linearmente. Nel codice si mostra come definirne una a partire da un argomento, nel nostro caso si assegna un posto a ciascun token dell’argomento (si spezza a “niente”). Con questa struttura è facile eseguire compiti ripetitivi o estrarre l’inizio e la fine.

• Una “property list” è una collezione “indirizzata” di token list. Gli elementi sono accessibili con una chiave. Nel nostro caso la chiave è un carattere alfanumerico, a cui associamo un valore numerico (potrebbe essere qualsiasi cosa).

Nel codice si esegue un tipico compito ripetitivo su una sequence:
`\seq_map_inline:N \seq_map_inline:Nn \l_cf_codice_seq
{
\int_incr:N \l_cf_position_int
\cf_add:n { ##1 }
}`
Il codice dato come secondo argomento viene eseguito per ciascun elemento della sequence (che viene denotato con [tt]##1[/tt], perché siamo dentro una definizione).

Per motivi di compattezza del codice, invece di scrivere tutta l’azione da eseguire nell’argomento di [tt]\seq_map_inline:Nn[/tt], è preferibile usare una funzione separata. La funzione [tt]\cf_add:n[/tt] ha un argomento (e sappiamo che è un unico carattere alfanumerico); ciò che fa è usare questo valore come chiave per ottenere il valore corrispondente dalla property list opportuna (posto dispari o pari, a seconda del valore di [tt]\l_cf_position_int[/tt]) e somma il valore a quello di [tt]\l_cf_checksum_int[/tt].

Il confronto finale avviene allo stesso modo: si calcola [tt]\l_cf_checksum_int[/tt] modulo 26 e si confronta con il valore corrispondente all’ultimo carattere.

Ciao
Enrico

Go to top