Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36
  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,590
    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,590
    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,590
    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
    Registrato dal
    Nov 2009
    Messaggi
    353
    devo imparare quel linguaggio e mi servirebbe qualche esempio da cui partire

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da CodiceProg Visualizza il messaggio
    devo imparare quel linguaggio e mi servirebbe qualche esempio da cui partire
    Se proprio ci tieni ecco
    codice:
    let rec sums' ((s::_) as ss) xs =
        match xs with
            | [x] -> (s+x) :: List.rev ss
            | (x::xs) -> sums' ((s+x)::ss) xs
    
    let sums (x::xs) = sums' [x] xs
    
    (* supporto per la visualizzazione e il testing *)
    let (@.) f g x = f (g x)
    
    let print_int_list = print_endline @. String.concat " " @. List.map string_of_int
    
    let () = print_int_list (sums [1;2;3;4;5])
    Ma non pensare che ti sarà di qualche utilità...
    Ultima modifica di Scara95; 20-01-2014 a 15:28
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    grazie,
    con ricorsione di coda

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    È tail recursive, ed in ogni caso se ti serve qualcosa puoi benissimo farlo da solo, dato che il linguaggio lo devi imparare tu.
    "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 © 2024 vBulletin Solutions, Inc. All rights reserved.