Wednesday, October 12, 2016

Libroman , libroman






+

Tutorial per libroman libroman consente di utilizzare i numeri romani in Haskell. Sostengono la matematica di base e la conversione da e per le stringhe. Questo tutorial è un file alfabetizzata Haskell quindi se si vuole giocare con il Tutorial mentre facciamo questo si può semplicemente avviare ghci e caricare questo modulo con ghci & gt; : L Data. Roman. Tutorial Tipo di classe romana Il modulo Data. Roman esporta la romana tipo di classe. Che ha un unico metodo fromRoman convertire da un valore romana a qualsiasi valore integrale. Ci sono due tipi di dati che implementano questa classe tipo: RomanSymbol. rappresenta i simboli che compongono numeri romani RomanNumeral. rappresenta la combinazione di questi simboli. Il tipo di dati RomanSymbol è un semplice ADT che ha le seguenti Costruttori: Nulla | I | V | X | L | C | D | M dove Nulla rappresenta zero. RomanNumeral è un tipo sinonimo di liste di RomanSymbol s (come in [RomanSymbol]). Questo tipo di dati può essere utilizzato per rappresentare una qualsiasi combinazione delle RomanSymbol (anche se non segue le regole classiche), e per estensione i valori numerici che rappresentano. Per il resto di questo tutorial lavoreremo con RomanNumeral Tipo di dati RomanNumeral Oltre l'istanza di cui sopra per la romana. RomanNumeral è anche un membro di tutta una serie di altre classi di tipo. Perché un un letterale numerico è zucchero sintattico per fromInteger a Il modo più semplice per dichiarare un valore RomanNumeral è come questo: È inoltre possibile creare sistema di numerazione romano utilizzando manualmente Lista di sintassi. Se, per esempio, si desidera che il numero 4 rappresentato come IIII, si può solo fare questo. Mathy Stuff con RomanNumeral Una volta che avete alcuni valori si può arrivare a lavorare. La classe tipo Num vi permette di fare la matematica di base: `` `Haskell Haskell d = a + b - CCLXXXV e = B - C - CCLXVI f = e * d Proprio come con qualsiasi altro valore enumerabile, è possibile dichiarare gamme: Attenzione: I romani non avevano un concetto di numeri negativi, in modo RomanNumeral non può rappresentare numeri negativi. Ciò significa che la funzione Negate causerà un'eccezione underflow. Lo stesso se si sottrae un RomanNumeral più grande da una più piccola, o si esegue qualsiasi altra operazione che creerebbe un valore negativo. Non so come risolvere questo problema (a parte la tipizzazione dipendente: P), come semplicemente un'eccezione e schiantarsi tutto rovina parte della bontà di tipo controllato che abbiamo in Haskell, ma restituendo il risultato sbagliato a causa di questo sembra ancora peggio in qualche modo. Provate a indovinare quale dei prossimi due thows un'eccezione, e quale non lo fa In poche parole: Matematicamente è possibile utilizzare RomanNumeral fondamentalmente nello stesso modo di qualsiasi altro valore integrale senza segno (Word, per esempio) Confronto di sistema di numerazione romano E, naturalmente, è possibile confrontare due RomanNumeral s con (& gt; =). (& Gt;). (==). (& Lt;) e (& lt; =) Attenzione: (==) ha un piccolo capriccio derivante dal fatto che RomanNumeral consente di rappresentare lo stesso valore numerico in più modi. (==) Sarà solo tornare true se la rappresentazione è uguale, non solo il valore numerico. Tipo numerica Conversione Integral ha anche un toInteger metodo che può essere usato per costringere i valori romani a intero s. Tuttavia la funzione fromIntegral dal Preludio è molto più generale, come si può convertire da qualsiasi valore integrante di qualsiasi altro valore integrale, in modo da poter utilizzare sia per la conversione da e verso RomanNumeral. libroman è abbastanza bravo a interpretare il valore numerico 'corretto' per RomanNumeral s che non seguono le regole classiche della scrittura numeri romani, per esempio doppia sottrazione come in XIIX, o ripetere lo stesso carattere più di 3 volte come in IIII. Se si controlla questi valori nel ghci (utilizzando fromIntegral) si vedrà che essi sono interpretati come 18 e 4 che è l'interpretazione più ragionevole (imho) Probabilmente si può indovinare i tipi di h. i e j. ma se non si è sicuri di poter controllare in ghci con: t Conversione in stringhe RomanNumeral implementa Leggi e Show per convertire da e verso String lettura è case insensitive.




No comments:

Post a Comment