<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-4%3Asdal039</id>
	<title>SE250:lab-4:sdal039 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-4%3Asdal039"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-4:sdal039&amp;action=history"/>
	<updated>2026-04-28T21:22:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-4:sdal039&amp;diff=6194&amp;oldid=prev</id>
		<title>Mark: 6 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-4:sdal039&amp;diff=6194&amp;oldid=prev"/>
		<updated>2008-11-03T05:19:37Z</updated>

		<summary type="html">&lt;p&gt;6 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Running the assert checks on the functions below shows that they all work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 int length(Cons* list) {&lt;br /&gt;
    len = 0;    &lt;br /&gt;
    for( ; list != nil ; list = list-&amp;gt;tail, len++ );&lt;br /&gt;
    return len;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 element_t first(Cons* list) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; i &amp;lt; 0 ; list = list-&amp;gt;tail, i++ );&lt;br /&gt;
 	return list-&amp;gt;head;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 element_t second(Cons* list) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; i &amp;lt; 1 ; list = list-&amp;gt;tail, i++ );&lt;br /&gt;
 	return list-&amp;gt;head;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 element_t third(Cons* list) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; i &amp;lt; 2; list = list-&amp;gt;tail, i++ );&lt;br /&gt;
 	return list-&amp;gt;head;	&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 element_t fourth(Cons* list) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; i &amp;lt; 3; list = list-&amp;gt;tail, i++ );&lt;br /&gt;
 	return list-&amp;gt;head;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 element_t nth(int j, Cons* list) {&lt;br /&gt;
    int  i = 0;&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; i &amp;lt; j ; list = list-&amp;gt;tail, i++ );&lt;br /&gt;
 	return list-&amp;gt;head;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int equal(Cons* l1, Cons* l2) {&lt;br /&gt;
 if ((l1 != nil &amp;amp;&amp;amp; l2 == nil) || (l1 == nil &amp;amp;&amp;amp; l2 != nil))&lt;br /&gt;
 	return 0;&lt;br /&gt;
 &lt;br /&gt;
    for( ; l1 != nil &amp;amp;&amp;amp; l2 != nil ; l1 = l1-&amp;gt;tail, l2 = l2-&amp;gt;tail ) {&lt;br /&gt;
 	if (l1-&amp;gt;head != l2-&amp;gt;head)&lt;br /&gt;
 	   return 0;&lt;br /&gt;
    }&lt;br /&gt;
 //must be equal &lt;br /&gt;
    return 1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Cons* find(element_t elt, Cons* list) {&lt;br /&gt;
    for( ; list != nil &amp;amp;&amp;amp; list-&amp;gt;head != elt ; list = list-&amp;gt;tail);&lt;br /&gt;
    return list;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Cons* reverse(Cons* list) {&lt;br /&gt;
    Cons* list_copy = nil;&lt;br /&gt;
    for(  ; list != nil ;  list = list-&amp;gt;tail)&lt;br /&gt;
 	list_copy = cons(list-&amp;gt;head, list_copy);&lt;br /&gt;
 &lt;br /&gt;
     return list_copy;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One particularly hard part of this lab was the copy_list function. After getting some strange results, it turned out that with only a few changes it could be turned into the &amp;quot;reverse&amp;quot; function and so copy_list was left alone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Cons* nappend(Cons* list1, Cons* list2) {&lt;br /&gt;
    for(  ;  ;  list1 = list1-&amp;gt;tail) {&lt;br /&gt;
 	if ((list1-&amp;gt;tail == nil) | (list1 == nil))&lt;br /&gt;
 	    list1-&amp;gt;tail = list2;   &lt;br /&gt;
 	return list1;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This code nearly works, giving the output &lt;br /&gt;
 List[]&lt;br /&gt;
 List[]&lt;br /&gt;
 List[10]&lt;br /&gt;
 List[10,20]&lt;br /&gt;
&lt;br /&gt;
where the expected output is&lt;br /&gt;
 List[]&lt;br /&gt;
 List[10]&lt;br /&gt;
 List[10]&lt;br /&gt;
 List[10,20]&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>