Divido en Haskelo
English ∅ Esperanto
2018-08-05 12:41:29 +0800
Tamen ĉiu decido por io estas decido kontraŭ io alia.
—H. G. Tannhaus, Dark (2017)

Lernante pri divido en Haskelo, mi konsciis, ke la koncepto ne estas tiom bagatele kiel ĝin mi komence volis. Estas subtilaj kontrastoj inter la funkcioj kiuj oni povas facile faligi kiu ne estas konscias de ili. Entjeran dividon kiu rondigas al nulo quot faras. div similas al quot, tamen ĝi rondigas sub nulo—negativa senfineco. La reston de divido rem liveras. mod, aliflanke, modulan aritmetikon faras.
En la «GHCi»-interago ĉi-supre, la opon de la apliko de quot kaj rem al iliaj argumentoj quotRem liveras, dum la opon de la apliko de div kaj mod al iliaj argumentoj divMod liveras.
Prelude> quotRem 13 5
(2,3)
Prelude> quotRem (-13) 5
(-2,-3)
Prelude> quotRem 13 (-5)
(-2,3)
Prelude> quotRem 5 13
(0,5)
Prelude> quotRem (-5) 13
(0,-5)
Prelude> quotRem 5 (-13)
(0,5)
Prelude> divMod 13 5
(2,3)
Prelude> divMod (-13) 5
(-3,2)
Prelude> divMod 13 (-5)
(-3,-2)
Prelude> divMod 5 13
(0,5)
Prelude> divMod (-5) 13
(-1,8)
Prelude> divMod 5 (-13)
(-1,-8)
Apartan atenton al negativaj nombroj donante, jen kelkaj rimarkoj pri ĝi:
quotRemkajdivModkondutas same se ĉiom da argumentoj pozitivas.quotliveras0, se la dividato estas malpli ol la dividanto.remsekvas la signon de la dividato.remliveras la dividato, se la dividato estas malpli ol la dividanto.divrondigas la dividanton al negative senfineco, se aŭ la dividato aŭ la dividanto negativas.modsekvas la signon de la dividanto.divliveras0, se la dividato estas malpli ol la dividanto, kaj ambaŭ argumentoj estas pozitivaj.modliveras la dividaton, se la dividato estas malpli ol la dividanto, kaj ambaŭ argumentoj estas pozitivaj.divliveras-1se la dividato negativas, kaj ĝia absoluta valoro estas malpli ol la dividanto.quotkajdivliveras0se la dividato estas0, kaj la dividanto ne estas nulo.modliveras la diferencon de la absolutaj valoroj de la dividato kaj la dividanto, sekvante la signon de la dividanto, se aŭ la dividato aŭ la dividanto negativas, kaj se la absoluta valoro de la dividato estas malpli ol la absoluta valoro de la dividanto.- Se aŭ la dividato aŭ la dividanto de
modnegativas, kaj la absoluta valoro de la dividato estas pli ol la absoluta valoro de la dividanto,modliveras valoron tiel, ke kiam ĉi tiu valoro estas adiciita al la rezulto de ladivde la dividato kaj la dividanto, multiplikite per la dividanto, ĝi liveras la dividaton demod. Tio estas:
Do, sex == (x `mod` y) + (x `div` y) * yx = (-13)kajy = 5, tiam
taksas al(-13) == ((-13) `mod` 5) + ((-13) `div` 5) * 5True.