<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Apr 28, 2013, at 2:46 AM, Jordan Johnson &lt;<a href="mailto:jmj@fellowhuman.com">jmj@fellowhuman.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>1) Write a couple of test cases for&nbsp;<b>insert-everywhere/in-one-word</b>. &nbsp;Specific data is <i>almost always</i>&nbsp;easier to think about than abstract names. &nbsp;At very least, make a test case for a 1-letter word <b>w1</b>&nbsp;and another for a 2-letter word <b>w2</b>, such that <b>w1</b> is <b>(rest w2)</b>.</div><div><br></div><div>2) In those test cases, identify what <b>(first a-word)</b>&nbsp;and&nbsp;<b>(insert-everywhere/in-one-word a-1str (rest a-word))</b>&nbsp;are. &nbsp;Compare those data to your test cases' desired results, since those results are what <b>create-combinations</b>&nbsp;must produce from those two pieces of data. &nbsp;Use these data to make a test case for <b>create combinations</b>.</div></div></blockquote><div><br></div>This is what I call an "inventory with values". &nbsp;Before you get to this stage, you've learned to write down (in comments) an "inventory" of expressions you're likely to need inside the function. &nbsp;Start with the parameters, and any global variables that are obviously related. &nbsp;If any of those are of struct types, you might want to add expressions getting at their fields. &nbsp;If any of those are of variant types (like "list", which is "either an empty list or a non-empty list"), write a conditional that distinguishes the cases, and then within each case, you can list the likely expressions. &nbsp;So for a typical function-on-lists, you get</div><div><br></div><div>(define (my-function numbers)</div><div>&nbsp; &nbsp;; numbers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a list of numbers</div><div>&nbsp; &nbsp;(cond [(empty? numbers)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; …</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(cons? numbers)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (first numbers) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a number</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (rest numbers) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a list of numbers</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (my-function (rest numbers)) &nbsp; &nbsp; &nbsp; whatever type this returns</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; …</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]))</div><div><br></div><div>Then comes the "inventory with values" part: pick a not-too-simple example (say, a list of three or four elements) from the test cases that you've already written (if you haven't already written several test cases, with right answers, stop and do that!), and next to each of the comment expressions, write down its value for that example. &nbsp;Also add another commented line saying "right answer", and write down ITS value for that example. &nbsp;If there's another conditional, other than the "is it empty or not?" question above, choose at least two not-too-simple examples, one for each case. &nbsp;The result might look like</div><div><br></div><div><div>(define (my-function numbers)</div><div>&nbsp; &nbsp;; numbers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a list of numbers<span class="Apple-tab-span" style="white-space:pre">                        </span>'(3 8 7 2)</div><div>&nbsp; &nbsp;(cond [(empty? numbers)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; …</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(cons? numbers)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (first numbers) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a number<span class="Apple-tab-span" style="white-space:pre">                                        </span>3</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (rest numbers) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a list of numbers<span class="Apple-tab-span" style="white-space:pre">                        </span>'(8 7 2)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; (my-function (rest numbers)) &nbsp; &nbsp; &nbsp; whatever type this returns<span class="Apple-tab-span" style="white-space:pre">        </span>278</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; right answer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;number &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2783</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; …</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]))</div><div><br></div></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Stephen Bloch</div><div><a href="mailto:sbloch@adelphi.edu">sbloch@adelphi.edu</a></div></div></span></span>
</div>
<br></body></html>