Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353

    Haskell / Ocaml duplicare lista

    Ad esempio avendo
    l1=[1,2,3,4,5]
    duplicare in una lista
    l2=[15,1,3,6,10]
    nel primo elemento la somma di tutti gli elementi della lista e nel resto la somma avanzando di posizione
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Perché vuoi il 15 per primo?

    Haskell:
    codice:
       sums = scanl1 (+)
       -- sums [1, 2, 3, 4, 5] -> [1, 3, 6, 10, 15]
    
      sums xs = last ss : init ss
        where
          ss = scan1 (+) xs
      -- sums [1, 2, 3, 4, 5] -> [15, 1, 3, 6, 10]
      -- meno efficiente
    
      sums (x:xs) = sums' [x] xs
        where
          sums' ss@(s:_) [x] = (s+x) : reverse ss
          sums' ss@(s:_) (x:xs) = sums' ((s+x):ss) xs
      -- a mano
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    intanto,
    grazie mille
    che la somma totale come primo elemento lo richiede l' esercizio
    la sintassi è Haskell?
    e in Ocaml?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    E in ocaml fai esattamente la stessa cosa. Devi solo cambiare sintassi, non mi sembra un gran problema...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    certamente, era però come esempio di sintassi di Ocaml visto che non utilizzo il linguaggio

  6. #6
    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
    certamente, era però come esempio di sintassi di Ocaml visto che non utilizzo il linguaggio
    Scusa, ma allora a che ti serve sapere com'è quel codice in ocaml?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    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
    molto gentile,
    mi sorge ancora un dubbio, per fare ad esempio, duplicare se un elemento è maggiore del precedente,
    si può utilizzare un pattern del tipo a::b::resto e controllare se b è > di a?
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Puoi fare tutto quello che vuoi con il pattern matching...
    Stai comunque sempre attento ai casi base e alle limitazioni del dominio
    Quote Originariamente inviata da CodiceProg Visualizza il messaggio
    daccordo,
    quindi quel frammento di codice è corretto?
    Quale frammento di codice di preciso?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    no no,solo per questo "a::b::resto"

  9. #9
    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

  10. #10
    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:
    []

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.