Re: [risolto] plain – confronto condizionale fra stringhe

#58840
Up
0
Down
::

L’esempio minimo è il seguente:`\def\param{moebius}

\def\test#1#2#3#4{%
\if#4\param%
Well done job!%
\else%
Ah no! Il quarto parametro deve %
contenere la stringa `\param'%
\fi}

\test{pianoforte}{betelgeuse}{Zen}{moebius}

\bye`

Ovviamente restituisce il risultato sbagliato.
Perchè non vuole capire che il quarto parametro contiene davvero la stringa ‘moebius’?

Grazie, ciao.

Sam Qasbah

Perché \if confronta solo due token. Nel tuo caso confronta la “m” con la “o” e ovviamente decide che sono diversi. 🙂

Occorre parecchia attenzione con \if, perché questo condizionale opera con espansione; la risposta corretta è
`\def\param{moebius}
\def\test#1#2#3#4{%
\def\next{#4}%
\ifx\next\param
Well done job!%
\else
Ah no! Il quarto parametro deve %
contenere la stringa `\param'%
\fi}`
Il condizionale \ifx non espande i due token che seguono e ne confronta i significati.

In alternativa
`\usepackage{etoolbox}
\def\test#1#2#3#4{%
\ifstrequal{#4}{moebius}
{Well done job!}
{Ah no! Il quarto parametro deve %
contenere la stringa `\param'}}`
Ciao
Enrico

Go to top