Esta es la solución más completa que te podemos dar, pero obsérvala pausadamente y analiza si se adapta a tu trabajo.
Solución:
Tiempo While[procedure; test]
funciona, eso aspecto muy parecido a While[test, procedure]
. La única diferencia es ;
contra ,
. While
no es la construcción más utilizada, por lo que cuando se usa de esta manera, existe una alta probabilidad de malentendido/lectura incorrecta.
Si la legibilidad/confiabilidad es una preocupación (por ejemplo, un paquete publicado desarrollado en colaboración), usaría el más largo pero más claro
While[True,
procedure;
If[Not[test], Break[]]
]
El único argumento aquí es la legibilidad y la “programación defensiva” (esfuerzo adicional para evitar problemas accidentales). La legibilidad es subjetiva. Si eres la única persona que escribe/lee el código y te acostumbras a este uso de While
(y por lo tanto siempre preste especial atención a la ,
contra ;
), entonces este argumento no se aplica.
¿Por qué no escribir uno propio y colocarlo en su archivo init.m?
SetAttributes[DoWhile, HoldAll];
DoWhile[procedure_, test_] := While[procedure; test]
Aquí hay otra forma de escribir la tuya:
SetAttributes[doWhile, HoldAll];
doWhile[expr_, test_] := CompoundExpression[expr, While[test, expr]]
O solo:
doWhile[expr_, test_] := (expr; While[test, expr])
valoraciones y reseñas
Si para ti ha sido de utilidad este artículo, te agradeceríamos que lo compartas con más programadores de esta manera nos ayudas a difundir nuestra información.