Thread View: pl.comp.lang.funkcyjne
5 messages
5 total messages
Started by ppp
Mon, 21 May 2007 22:06
Dlaczego to nie dziala?
Author: ppp
Date: Mon, 21 May 2007 22:06
Date: Mon, 21 May 2007 22:06
31 lines
1727 bytes
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?
Author: Tomasz bla Fortuna
Date: Mon, 21 May 2007 23:27
Date: Mon, 21 May 2007 23:27
34 lines
1807 bytes
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?
Author: ppp
Date: Tue, 22 May 2007 14:02
Date: Tue, 22 May 2007 14:02
44 lines
2523 bytes
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?
Author: Tomasz bla Fortuna
Date: Tue, 22 May 2007 17:37
Date: Tue, 22 May 2007 17:37
43 lines
2070 bytes
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?
Author: ppp
Date: Fri, 25 May 2007 06:39
Date: Fri, 25 May 2007 06:39
1 lines
1331 bytes
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