Extend your language: Difference between revisions

no edit summary
m (syntax highlighting fixup automation)
No edit summary
Line 204:
end
end.</syntaxhighlight>
 
=={{header|Amazing Hopper}}==
<p>HOPPER permite definir muchas extensiones del lenguaje a través de su potentísimo preprocesador. A continuación, veremos un par de ejemplos</p>
 
Ejemplo #1:
<syntaxhighlight lang="bennugd">
#include <jambo.h>
 
#defn Siambassonverdaderas(_X_,_Y_) ##CODEIF,__firstop__=0;#ATOM#CMPLX;cpy(__firstop__),#ATOM#CMPLX;and;jnt(#ENDIF),
#defn Essólolaprimeraopción jmp(%%CODEIF), %ENDIF:, {__firstop__}, jnt(#ENDIF),
#synon Else Essólolasegundaopción
#synon EndIf FindelSi
 
Main
True(v), False(w)
Si ambas son verdaderas ( v, w )
Printnl ("Son ambas opciones verdaderas")
 
Es sólo la primera opción
Printnl ("La primera opción es verdadera")
 
Es sólo la segunda opción
Printnl ("La segunda opción es verdadera")
 
Fin del Si
End
</syntaxhighlight>
{{out}}
<pre>La primera opción es verdadera</pre>
 
<p>Ejemplo #2:
El preprocesador de HOPPER permite extender la estructura "IF" (o "SI" es español), a cualquier número de expresiones lógicas como opción:
</p>
<syntaxhighlight lang="bennugd">
#include <jambo.h>
 
#defn Sitodassonverdaderas(*) ##CODEIF,{1},#GENCODE $$$*$$$ opción#ITV=0;\
#ATCMLIST;cpy(opción#ITV);and;#ENDGEN;,jnt(#ENDIF)
#defn Sonverdaderas(*) jmp(%%CODEIF), %ENDIF:, {1}, #GENCODE $$$*$$$ #ATCMLIST;and;#ENDGEN;jnt(#ENDIF),
#defn Esla(_X_) jmp(%%CODEIF), %ENDIF:, {_X_}, jnt(#ENDIF),
#defn Sonverdaderaslasopciones(*) jmp(%%CODEIF), %ENDIF:,{1};#GENCODE $$$*$$$ opción#ITV;and;#ENDGEN;jnt(#ENDIF),
#synon EndIf FindelSi
 
Main
True(v), True(x), True(y)
Si todas son verdaderas 'v, {0.025} Is equal to (10), x, y'
Set ("Todas las opciones son verdaderas")
 
Son verdaderas 'opción 2, opción 3, opción 4'
Set ("Sólo son verdaderas la igualdad, X e Y")
 
Son verdaderas las opciones '1,3,4'
Set ("Son verdaderas V, X e Y")
 
Son verdaderas 'opción 1, opción 3'
Set ("Son verdaderas V y X")
 
/* podríamos seguir preguntando... */
 
Es la 'opción 4'
Set ("Al menos, Y es verdadera")
Fin del Si
Prnl
End
</syntaxhighlight>
{{out}}
<pre>Son verdaderas V, X e Y</pre>
 
<p>Ejemplo #3:
Aquí sólo la macro "»" que significa "CPY" (copia el valor de memoria a la variable indicada pero sin removerlo) permite extender el uso de "IF" (que también es una macro que extiende el lenguaje base), de acuerdo al ejemplo:</p>
<syntaxhighlight lang="bennugd">
#include <jambo.h>
 
Main
True(v), False(w), first option=0, second option=0
If ( var 'v' » 'first option', And ( w » 'second option' ) )
Printnl ("Son ambas opciones verdaderas")
 
Else If ( first option )
Printnl ("La primera opción es verdadera")
 
Else If ( second option )
Printnl ("La segunda opción es verdadera")
Else
Printnl ("Ninguna es verdadera")
End If
End
</syntaxhighlight>
{{out}}
<pre>La primera opción es verdadera</pre>
 
=={{header|Arturo}}==
545

edits