[plt-scheme] HTDP 16.3.4
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.
>
>