Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 36
  1. #21
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    no no,solo per questo "a::b::resto"

  2. #22
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da CodiceProg Visualizza il messaggio
    no no,solo per questo "a::b::resto"
    No no cosa?!

    Comunque sì, è corretto, ma ti ripeto di controllare le limitazioni del dominio.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #23
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    mi scuso se riapro questa discussione dopo un pò di tempo,
    dopo aver creato alcuni esempi positivamente con altre funzioni, sono tornato su questo codice
    codice:
    let rec sums ((s::_) as ss) xs =
      match xs with
        | []->[]
        | [x] -> (s+x) :: ss
        | (x::xs) -> sums ((s+x)::ss) xs;;
    al momento dell' invocazione restituisce :
    Warning 8: this pattern-matching is not exhaustive.
    Here is an example of a value that is not matched:
    []

  4. #24
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Il matching esterno presume che ci sia almeno un valore in ss. Ma la funzione che dovrebbe fare?!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #25
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    la funzione è quella delle pagine precedenti di questa discussione che mi avevi scritto gentilmente tu
    Avendo una lista di interi e passandola alla funzione restituisce la lista con gli elementi con la somma progressiva
    es.
    [0,1,2,3,4,5] --> [0,1,3,6,10,15]

  6. #26
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da CodiceProg Visualizza il messaggio
    [0,1,2,3,4,5] --> [0,1,3,6,10,15]
    Quella funzione non fa ciò, io non ho mai scritto quello spezzone di codice, il waring è dato dalla pattern ((s::_) as ss) che fallisce per [], tuttavia nel mio codice una funzione con quella pattern veniva chiamata solo da un'altra funzione.

    Questa è una soluzione che fa quello che chiedi.
    codice:
    let rev_scanl f a =
        let rec rev_scanl' f ((acc::_) as accs) xs = match xs with
           |[] -> accs
           |(y::ys) -> rev_scanl' f ((f acc y)::accs) ys
        in rev_scanl' f [a]
     
    let rev_scanl1 f (x::xs) = rev_scanl f x xs
     
    let sums xs = List.rev (rev_scanl1 (+) xs)
    oppure, meno riutilizzabile,
    codice:
    let sums (x::xs) = 
        let rec sums' ((s::_) as ss) xs = match xs with
            | []->ss
            | (x::xs) -> sums' ((s+x)::ss) xs
        in List.rev (sums' [x] xs)
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #27
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    perfetto gentilissimo,
    sono una cosa, nel secondo codice restituisce :

    Warning 8: this pattern-matching is not exhaustive.
    Here is an example of a value that is not matched:
    []
    Characters 9-161:
    .........(x::xs) =
    let rec sums' ((s::_) as ss) xs = match xs with
    | []->ss
    | (x::xs) -> sums' ((s+x)::ss) xs
    in List.rev (sums' [x] xs)..
    Warning 8: this pattern-matching is not exhaustive.
    Here is an example of a value that is not matched:
    []


    anche se poi il codice è comunque "utilizzabile"

  8. #28
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ti ho già spiegato a che è dovuto: la pattern presume che ci sia almeno un valore nella lista, in quanto la funzione presume che ci sia almeno un valore nella lista e non è definita per liste nulle (ie [] ).
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #29
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    quindi basta aggiungere []->[]?

  10. #30
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da CodiceProg Visualizza il messaggio
    quindi basta aggiungere []->[]?
    No. Quello non è un errore, è un warning che segnala che potresi aver tralasciato parte della soluzione. Ma la tua funzione prevede che ci sia almeno un elemento nella lista (dato che il primo valore dell'accumulatore non è 0, ma il primo elemento) per cui non ci sono problemi, a patto che non chiami la funzione con una lista vuota.

    Sì. Se prevedi che nel caso la lista sia vuota non vi sia alcun valore nelle somme successive.

    Dipende dalle specifiche della tua funzione. Tu hai dato come specifiche solo [0,1,2,3,4,5] --> [0,1,3,6,10,15]
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.