[plt-scheme] HTDP 16.3.4

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Fri Sep 22 19:15:43 EDT 2006

Figure out what each expression in the template computes, just as the  
recipe says. Then figure out how you can combine those values (lists)  
into a single value (list). That's all. My freshmen can do it, w/o  
help -- Matthias


On Sep 22, 2006, at 6:56 PM, wooks . wrote:

>
>
>
>> From: Matthias Felleisen <matthias at ccs.neu.edu>
>> To: wooks . <wookiz at hotmail.com>
>> CC: plt-scheme at list.cs.brown.edu
>> Subject: Re: [plt-scheme] HTDP 16.3.4
>> Date: Fri, 22 Sep 2006 18:15:08 -0400
>>
>>
>> On Sep 22, 2006, at 5:28 PM, wooks . wrote:
>>
>>>
>>> I am looking at the last part of the section marked Challenge  
>>> which  requires a function
>>>
>>> ;;func-producing-list-of-lists: symbol directory-structure ->   
>>> [[symbol]]
>>> ;;produces a list of all the paths to files of the specified  
>>> name  in the directory structure.
>>
>> Where is the definition of [[symbol]]? Where is the definition of   
>> "directory-structure"?
>>
>
> Well I was paraphrasing to make the statement of my problem more  
> concise. These are the definitions I have been working with.
>
> (define-struct file (name size content))
> (define-struct dir (name dirs files))
>
> ; DATA ANALYSIS
> ; A file is a structure:
> ;  (make-file n s x)
> ; where n is a symbol, s is a number, and x is some Scheme value.
> ;
> ; A list-of-files is either
> ;
> ;    1.  empty, or
> ;    2. (cons s lof) where s is a file and lof is a list of files.
> ;
> ; A dir is a structure:
> ;  (make-dir n ds fs)
> ; where n is a symbol, ds is a list of directories, and fs is a  
> list of files.
> ;
> ; A list-of-directories is either
> ;
> ;    1.  empty or
> ;    2. (cons s lod) where s is a dir and lod is a list of  
> directories.
> ;
> ;
>
>> Let's use the recipe. Presumably you have a template, one line in  
>> one  function and three in the other keeping in mind that the  
>> function(s)  really must return a list of paths. So
>>
>
> ....and these are the templates I wrote for the first 2 parts of  
> the problem .... find and find? both of which worked.
>
> (define (func-for-dir sym folder)
>  (....sym....
>       (dir-name folder) .....
>       (func-for-lods (dir-dirs  folder))....
>       (func-for-files (dir-files folder)))]))
>
> (define (func-for-lods alods)
>  (cond
>    [(empty? alods)....]
>    [else ....(func-for-dir (first alods)).....
>          (func-for-lods (rest alods))...]))
> (define (func-for-files alofs)
>  (cond
>    [(empty? alofs) ...]
>    [else .... (file-n (first alofs))
>          (file-s (first alofs))
>          (file-x (first alofs))
>          ....(func-for-files (rest alofs))..]))
>
>
>> -- cases without cross or self-references: return a list,  
>> distinguish  success from failure. done
>>
>> -- cases with self- or cross-references: each recursive/cross  
>> call  produces a list of paths to the "successes".  The answer is  
>> a  combination of those partial results, plus the knowledge that  
>> these  paths aren't complete. Since you figured out how to do one  
>> path, I  bet that this part is a minor little step. It really is  
>> just a help  function plus a line.
>>
>
> not on the same page with you yet Prof.
>
> After perusing Dr Bloch's webpages I started out
>
> ; OUTPUT TEMPLATE FOR FIND
> ; (define (func-returning-list-of-lists folder)
> ;   (cond
> ;     [..... empty]
> ;     [..... (cons (func-for-dir sym folder)
> ;                  (func-returning-list-of-lists folder))]))
>
> but couldn't figure out how to return successive paths.
> I'm not yet able to reconcile your input with my perception of the  
> problem.
>
>



Posted on the users mailing list.