[L3] Memorizzare boolean in una sequence

  • Creatore
    Topic
  • #80821
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao.
      Ho fatto qualche nuovo esperimento con LaTeX3, provando a memorizzare valori true/false in una variabile sequence.
      Il codice seguente funziona, ma vorrei sapere se ci sono cose che possono essere migliorate.
      Per prima cosa definisco una nuova variabile sequence che ho chiamato \l_my_bool, poi creo due funzioni una per memorizzare valori booleani a seconda del valore di un numero intero (questo non è importante, è solo un modo per inserire valori veri o valori falsi), ed una per ‘visualizzare’ il contenuto della sequence.

      Quello che memorizzo realmente nella sequence è una delle due costanti \c_true_bool o \c_false_bool del kernel di LaTeX3.
      Esiste un modo più elegante o più efficiente che non usare la funzione \seq_put_right:Nn con queste costanti?

      Nella funzione di stampa uso la funzione \bool_if:NTF, esiste un alternativa?

      `\documentclass{minimal}
      \usepackage{expl3}
      \usepackage{xparse}

      \ExplSyntaxOn
      % variabili
      \seq_new:N \l_my_bool

      % funzioni
      \cs_new:Nn \my_insertbool:n
      {
      \int_compare:nTF { #1 = 0 }
      { \seq_put_right:Nn \l_my_bool { \c_true_bool } }
      { \seq_put_right:Nn \l_my_bool { \c_false_bool } }
      }

      \cs_new:Nn \my_printseq:
      {
      \seq_map_inline:Nn \l_my_bool
      {
      \bool_if:NTF ##1
      { Vero\par }
      { Falso\par }
      }
      }

      % comandi interfaccia utente
      \NewDocumentCommand \bval { m }
      {
      \my_insertbool:n { #1 }
      }

      \NewDocumentCommand \printval { }
      {
      \my_printseq:
      }
      \ExplSyntaxOff

      \begin{document}
      \bval{1} % false
      \bval{1-1} % true
      \bval{0} % true
      \bval{-1} % false
      \bval{ 2 } % false

      \printval
      \end{document}`
      Grazie mille.
      Ciao.
      R.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #80822
        Up
        0
        Down
        ::

        robitex” post=80046Ciao.
        Ho fatto qualche nuovo esperimento con LaTeX3, provando a memorizzare valori true/false in una variabile sequence.
        Il codice seguente funziona, ma vorrei sapere se ci sono cose che possono essere migliorate.
        Per prima cosa definisco una nuova variabile sequence che ho chiamato \l_my_bool, poi creo due funzioni una per memorizzare valori booleani a seconda del valore di un numero intero (questo non è importante, è solo un modo per inserire valori veri o valori falsi), ed una per ‘visualizzare’ il contenuto della sequence.

        Quello che memorizzo realmente nella sequence è una delle due costanti \c_true_bool o \c_false_bool del kernel di LaTeX3.
        Esiste un modo più elegante o più efficiente che non usare la funzione \seq_put_right:Nn con queste costanti?

        Nella funzione di stampa uso la funzione \bool_if:NTF, esiste un alternativa?

        `\documentclass{minimal}
        \usepackage{expl3}
        \usepackage{xparse}

        \ExplSyntaxOn
        % variabili
        \seq_new:N \l_my_bool

        % funzioni
        \cs_new:Nn \my_insertbool:n
        {
        \int_compare:nTF { #1 = 0 }
        { \seq_put_right:Nn \l_my_bool { \c_true_bool } }
        { \seq_put_right:Nn \l_my_bool { \c_false_bool } }
        }

        \cs_new:Nn \my_printseq:
        {
        \seq_map_inline:Nn \l_my_bool
        {
        \bool_if:NTF ##1
        { Vero\par }
        { Falso\par }
        }
        }

        % comandi interfaccia utente
        \NewDocumentCommand \bval { m }
        {
        \my_insertbool:n { #1 }
        }

        \NewDocumentCommand \printval { }
        {
        \my_printseq:
        }
        \ExplSyntaxOff

        \begin{document}
        \bval{1} % false
        \bval{1-1} % true
        \bval{0} % true
        \bval{-1} % false
        \bval{ 2 } % false

        \printval
        \end{document}`
        Grazie mille.
        Ciao.
        R.

        Non userei affatto variabili boolean.
        `\documentclass{article}
        \usepackage{xparse}
        \ExplSyntaxOn
        \NewDocumentCommand{\bval}{ m }
        {
        \robitex_bval:n { #1 }
        }
        \cs_new_protected:Npn \robitex_bval:n #1
        {
        \int_compare:nTF{ #1 = 0 }
        { \seq_gput_right:Nn \g_robitex_values_seq { 1 } } % true
        { \seq_gput_right:Nn \g_robitex_values_seq { 0 } } % false
        }
        \seq_new:N \g_robitex_values_seq

        \NewDocumentCommand{\printval} { +m +m }
        {
        \robitex_printval: { #1 } { #2 }
        }
        \cs_new:Npn \robitex_printval: #1 #2
        {
        \seq_map_inline:Nn \g_robitex_values_seq
        { \int_compare:nTF { ##1 = 1 } { #1 } { #2 } }
        }
        \ExplSyntaxOff
        \begin{document}
        \bval{1} % false
        \bval{1-1} % true
        \bval{0} % true
        \bval{-1} % false
        \bval{ 2 } % false

        \printval{Vero\par}{Falso\par}
        \end{document}`
        In sostanza, normalizzo vero con 1 e falso con 0 (come si conviene a un matematico). 🙂

        Ciao
        Enrico

      • #80823
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Molto bene! Ma una domanda sorge spontanea…
          In una sequence dovrebbero essere memorizzati solo valori testuali e non valori token?
          R.

        • #80824
          Up
          0
          Down
          ::

          robitex” post=80052Molto bene! Ma una domanda sorge spontanea…
          In una sequence dovrebbero essere memorizzati solo valori testuali e non valori token?
          R.

          Ci puoi mettere quello che vuoi.

          Ciao
          Enrico

        • #80825
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            egreg9″ post=80053

            Molto bene! Ma una domanda sorge spontanea…
            In una sequence dovrebbero essere memorizzati solo valori testuali e non valori token?
            R.

            Ci puoi mettere quello che vuoi.

            Ciao
            Enrico

            Capito.
            Grazie.

        Visualizzazione 3 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top