2017-08-23 3 views
1

Je veux imprimer plusieurs numéros en chiffres romains, maisComment imprimer les chiffres romains supérieurs à 3999?

(format t "[email protected]~%" 4000) 

conduit à l'erreur suivante dans SBCL 1.3.20 et un similaire en utilisant ccl:

Number too large to print in Roman numerals: 4,000 
    [Condition of type SIMPLE-ERROR] 

Restarts: 
0: [RETRY] Retry SLIME REPL evaluation request. 
1: [*ABORT] Return to SLIME's top level. 
2: [ABORT] abort thread (#<THREAD "new-repl-thread" RUNNING {100503D2B3}>) 

Je ne trouve pas d'informations sur cette limite dans le Hyperspec et ne savais pas que les Romains avaient seulement des chiffres à 3999.

Existe-t-il une solution prête à l'emploi pour imprimer des nombres supérieurs à 3 999 comme chiffres romains?

+1

En fait ce n'est pas une limitation de Common Lisp, mais quelque chose d'inhérent aux chiffres romains. Pour les nombres au-dessus de 3999, les Romains ont ajouté une ligne sur un nombre pour la multiplier par 1000. – Renzo

Répondre

6

Il n'y avait aucun consensus parmi les Romains sur large number representation. Les concepteurs de CL se sont opposés à la résolution de la controverse, d'autant plus que les deux approches utilisées par les Romains ("apostrophus" et "vinculum") ne sont pas adaptés pour la représentation en ASCII sur un ATS.

PS. 3.999 peut être approchée par IV ;-)

+1

J'ai édité le formatage de nombre à la norme anglaise ;-) –