🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
5 messages
5 total messages Started by ppp Mon, 21 May 2007 22:06
Dlaczego to nie dziala?
#912
Author: ppp
Date: Mon, 21 May 2007 22:06
31 lines
1727 bytes
program ma zliczać ile razy w zadanym pliku wystąpił dany wyraz.
problem w tym, że za bardzo nie chce działać...

let isspace ch = (ch =' ') || (ch ='\t') || (ch ='\n') || (ch
='\r') ;;


let input_string channel =
  let s = ref "" and ch = ref (input_char channel) in
    begin
      while isspace (!ch) do ch := input_char channel done;
      while not (isspace (!ch)) do
        s := !s^(String.make 1 !ch);
        ch := input_char channel
      done;
      !s
    end
;;


let zlicz (nazwa,wyraz) =
  let plik = open_in nazwa
  in
    begin
      let i = ref (1) in
        while true do
	  let odczyt = input_string plik in
          i=i+1;
        done;
    end
;;
Re: Dlaczego to nie dziala?
#913
Author: Tomasz bla Fortuna
Date: Mon, 21 May 2007 23:27
34 lines
1807 bytes
Dnia 21 May 2007 15:06:56 -0700
ppp <jimmie0@wp.pl> napisał(a):

> program ma zliczać ile razy w zadanym pliku wystąpił dany wyraz.
> problem w tym, że za bardzo nie chce działać...
> 
> let isspace ch = (ch =' ') || (ch ='\t') || (ch ='\n') || (ch
> ='\r') ;;
> (ciach)
> let zlicz (nazwa,wyraz) =
>  let plik = open_in nazwa
>  in
>    begin
>      let i = ref (1) in
>        while true do
>	  let odczyt = input_string plik in
>          i=i+1;
>        done;
>    end
>;;

Funkcja "zlicz" pobiera nazwę wyrazu - ale nic z nim nie robi.
Do tego "i=i+1" nie jest specjalnie legalnym wyrażeniem, imho powinno
być i:=!i + 1. Też zamiast dziwnego "let zlicz (nazwa,wyraz)" dałbym
raczej: let zlicz nazwa wyraz, po co tu krotka? Tak trochę imperatywnie
pachnie. ;d

A odpowiadając na pytanie - program nie jest skończony, abstrahując od
tego co w/w kod miałby robić lub robi.

-- 
Tomasz bla Fortuna
jid: bla(at)af.gliwice.pl 
pgp: 0x90746E79 @ pgp.mit.edu
Re: Dlaczego to nie dziala?
#914
Author: ppp
Date: Tue, 22 May 2007 14:02
44 lines
2523 bytes
On 22 Maj, 01:27, Tomasz bla Fortuna <b...@thera.be> wrote:
> Dnia 21 May 2007 15:06:56 -0700
> ppp <jimm...@wp.pl> napisał(a):
>
>
>
> > program ma zliczać ile razy w zadanym pliku wystąpił dany wyraz.
> > problem w tym, że za bardzo nie chce działać...
>
> > let isspace ch = (ch =' ') || (ch ='\t') || (ch ='\n') || (ch
> > ='\r') ;;
> > (ciach)
> > let zlicz (nazwa,wyraz) =
> >  let plik = open_in nazwa
> >  in
> >    begin
> >      let i = ref (1) in
> >        while true do
> >      let odczyt = input_string plik in
> >          i=i+1;
> >        done;
> >    end
> >;;
>
> Funkcja "zlicz" pobiera nazwę wyrazu - ale nic z nim nie robi.
> Do tego "i=i+1" nie jest specjalnie legalnym wyrażeniem, imho powinno
> być i:=!i + 1. Też zamiast dziwnego "let zlicz (nazwa,wyraz)" dałbym
> raczej: let zlicz nazwa wyraz, po co tu krotka? Tak trochę imperatywnie
> pachnie. ;d
>
> A odpowiadając na pytanie - program nie jest skończony, abstrahując od
> tego co w/w kod miałby robić lub robi.
>
> --
> Tomasz bla Fortuna
> jid: bla(at)af.gliwice.pl
> pgp: 0x90746E79 @ pgp.mit.edu
>
>  signature.asc
> 1KPobierz

npisałem wcześniej, że ma zliczać wystąpienia zadanego wyrazu w
podanym pliku. no wiem że trochę brakuje, ale nie mam pomysłu na to
jakoś. czekam na olśnienie;)
Re: Dlaczego to nie dziala?
#915
Author: Tomasz bla Fortuna
Date: Tue, 22 May 2007 17:37
43 lines
2070 bytes
> > > program ma zliczać ile razy w zadanym pliku wystąpił dany wyraz.
> > > problem w tym, że za bardzo nie chce działać...

> 
> npisałem wcześniej, że ma zliczać wystąpienia zadanego wyrazu w
> podanym pliku. no wiem że trochę brakuje, ale nie mam pomysłu na to
> jakoś. czekam na olśnienie;)
Trzeba było napisać... ;p "Zróbcie za mnie moje zadanie domowe".

(* Wczytuje wyraz *)
let rec readWord channel s =
  match input_char channel with
  | ' ' | '\t' | '\n' | '\r' -> s
  | ch -> readWord channel (s ^ (Char.escaped ch))
;;

(* Zlicza wyrazy... *)
let rec count input word cnt =
  try
    let current = readWord input "" in
    if current = word then
      count input word (cnt+1)
    else
      count input word cnt
  with End_of_file -> cnt
;;

(* Wyświetla wynik, inicjalizuje plik... *)
let main filename word =
  let file = open_in filename in
  Printf.printf "%d\n" (count file word 1)
;;

main "counter.ml" "current";;


Nie jestem z tego kodu do końca zadowolony. Ale na zadanie domowe, masz
zrozumieć go. ;P
Pozdrawiam.
-- 
Tomasz bla Fortuna
jid: bla(at)af.gliwice.pl 
pgp: 0x90746E79 @ pgp.mit.edu
Re: Dlaczego to nie dziala?
#916
Author: ppp
Date: Fri, 25 May 2007 06:39
1 lines
1331 bytes
Powiedzmy że to zadanie domowe:) dzięki wielkie.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads