Thread View: pl.comp.lang.funkcyjne
2 messages
2 total messages
Started by Maciej Mrozowski
Sat, 02 Apr 2005 22:24
ocaml, listy leniwe
Author: Maciej Mrozowski
Date: Sat, 02 Apr 2005 22:24
Date: Sat, 02 Apr 2005 22:24
35 lines
2069 bytes
2069 bytes
Witam
(btw, z tego co widzę, jest to pierwszy merytoryczny wątek od pewnego czasu
na tej grupie :)
mam problem - fundamentalny jak dla mnie - jestem real newbie jeżeli chodzi
o ten sposób myślenia, znam co prawda pewne podstawy OCamla (w sumie to bez
"O" so far), niby wiem, że listy leniwe to takie struktury generowane
ad-hoc, mogą być nieskończone itd
kazano mi (tak tak, laborka na studiach) napisać funkcję przekształcającą
listę leniwą [x1,x2,x3,...] tak, by elementy x1, x2 itd powielić na tej
liście zadaną liczbę razy, a więc otrzymując listę [x1,x1,x2,x2,...] dla
powielenia razy 2.
Powielanie pojedynczego elementu wydaję się proste:
type 'a llist = Null | NewLazy of 'a * ( unit -> 'a llist );;
let rec makelist = function
( 0, _ ) -> Null
| ( n, el ) -> NewLazy( el, function() -> makelist( n-1, el ) )
;;
nie mam pomysłu jak zintegrować to z tworzeniem wynikowej listy -
konkatenacja list leniwych
jeżeli ktoś potrafi mi dać jakieś wskazówki na temat wgólnie posługiwania
się leniwymi listami (lub drzewami, znajdę analogię), to bardzo proszę
regards
Maciej Mrozowski
--
The difference between theory and practice is that in theory, there is no
difference between theory and practice, but in practice, there is.
Re: ocaml, listy leniwe
Author: Maciej Mrozowski
Date: Sat, 02 Apr 2005 23:13
Date: Sat, 02 Apr 2005 23:13
26 lines
1555 bytes
1555 bytes
Maciej Mrozowski wrote:
> type 'a llist = Null | NewLazy of 'a * ( unit -> 'a llist );;
>
> let rec makelist = function
> ( 0, _ ) -> Null
> | ( n, el ) -> NewLazy( el, function() -> makelist( n-1, el ) )
> ;;
>
> nie mam pomysłu jak zintegrować to z tworzeniem wynikowej listy -
> konkatenacja list leniwych
ok, po poniższym zabiegu:
let rec make k = function
Null -> Null
| NewLazy( h, f ) ->
NewLazy( makelist( k, h ), function() -> make k (f()) )
;;
mam listę list leniwych, teraz musze zrobić coś w stylu List.flatten - czy
ma ktoś lepszy pomysł ? (żeby wszystko zrobić dobrze od razu a nie składać
klocki)
--
In the world without walls, why do we need Windows and Gates?
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