<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Module tape</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
</head>
<body bgcolor="white">
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<hr>

<h1>Module tape</h1>
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Tape - simulated finite tape.

<p><b>Authors:</b> David Mercer (<a href="mailto:dmercer@alum.mit.edu"><tt>dmercer@alum.mit.edu</tt></a>).</p>

<h2><a name="description">Description</a></h2><p>Tape - simulated finite tape.</p>
 
  <p>This module provides an abstract data structure for storing a finite ordered list as on a tape.  
The tape has a head, which is the current position on the tape, and which can be read and written to.  
The head can be moved forward and backward, and cells can be inserted into and deleted from the tape.</p>
 
  <table align="center"><tr align="center">
  <td style="border: 1px solid black">cell 1</td>
  <td style="border: 1px solid black">cell 2</td>
  <td style="border: 1px solid black">cell 3</td>
  <td style="border: 2px solid black">cell 4</td>
  <td style="border: 1px solid black">cell 5</td>
  <td style="border: 1px solid black">cell 6</td>
  </tr><tr align="center"><td colspan="3"></td>
  <td align="center">^^^^<br>head</td>
  </tr></table>
<h2><a name="types">Data Types</a></h2>

<h3 class="typedecl"><a name="type-tape">tape()</a></h3>
<p><b>abstract datatype</b>: <tt>tape()</tt></p>
<p>Representation of a finite tape.</p>

<h2><a name="index">Function Index</a></h2>
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#append-2">append/2</a></td><td>Inserts a cell onto the end of the tape regardless of the position of the tape head.</td></tr>
<tr><td valign="top"><a href="#delete-1">delete/1</a></td><td>Deletes the cell on the tape under the tape head.</td></tr>
<tr><td valign="top"><a href="#insert_after-2">insert_after/2</a></td><td>Inserts a cell onto the tape in the position immediately following the tape head.</td></tr>
<tr><td valign="top"><a href="#insert_before-2">insert_before/2</a></td><td>Inserts a cell onto the tape in the position immediately preceding the tape head.</td></tr>
<tr><td valign="top"><a href="#length-1">length/1</a></td><td>Returns the length of the tape.</td></tr>
<tr><td valign="top"><a href="#move-2">move/2</a></td><td>Moves the tape head relative to its current position.</td></tr>
<tr><td valign="top"><a href="#new-1">new/1</a></td><td>Creates a new tape.</td></tr>
<tr><td valign="top"><a href="#position-1">position/1</a></td><td>Returns the current position of the tape head.</td></tr>
<tr><td valign="top"><a href="#prepend-2">prepend/2</a></td><td>Inserts a cell onto the beginning of the tape regardless of the position of the tape head.</td></tr>
<tr><td valign="top"><a href="#read-1">read/1</a></td><td>Returns the contents of the tape cell under the tape head.</td></tr>
<tr><td valign="top"><a href="#write-2">write/2</a></td><td>Overwrites the contents of the cell under the tape head.</td></tr>
</table>

<h2><a name="functions">Function Details</a></h2>

<h3 class="function"><a name="append-2">append/2</a></h3>
<div class="spec">
<p><tt>append(X::any(), Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Inserts a cell onto the end of the tape regardless of the position of the tape head.</p>
 
  When the tape is empty, the head of the resulting tape is set to the new cell.
  Otherwise, the tape head remains in its existing position.</p>

<h3 class="function"><a name="delete-1">delete/1</a></h3>
<div class="spec">
<p><tt>delete(Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Deletes the cell on the tape under the tape head.</p>
 
  The resulting tape's head will be positioned on the cell immediately following the deleted cell unless the deleted cell is the last cell, in which case the head will be positioned at the last cell of the resulting tape.
  If the last cell of the tape is deleted, the resulting tape is empty.</p>

<h3 class="function"><a name="insert_after-2">insert_after/2</a></h3>
<div class="spec">
<p><tt>insert_after(X::any(), Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Inserts a cell onto the tape in the position immediately following the tape head.</p>
 
  When the tape is empty, the head of the resulting tape is set to the new cell.
  Otherwise, the tape head remains in its existing position.</p>

<h3 class="function"><a name="insert_before-2">insert_before/2</a></h3>
<div class="spec">
<p><tt>insert_before(X::any(), Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Inserts a cell onto the tape in the position immediately preceding the tape head.</p>
 
  When the tape is empty, the head of the resulting tape is set to the new cell.
  Otherwise, the tape head remains in its existing position.</p>

<h3 class="function"><a name="length-1">length/1</a></h3>
<div class="spec">
<p><tt>length(Tape::<a href="#type-tape">tape()</a>) -> integer()</tt></p>
</div><p>Returns the length of the tape.</p>

<h3 class="function"><a name="move-2">move/2</a></h3>
<div class="spec">
<p><tt>move(N::integer() | first | last, Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Moves the tape head relative to its current position.</p>
 
  Negative <code>N</code> moves the head backward, positive <code>N</code> moves the head forward.
  Tape head does not move when <code>N</code> = 0.
  If <code>N</code> = <code>first</code>, tape head moves to beginning of tape.
  If <code>N</code> = <code>last</code>, tape head moves to end of tape.</p>

<h3 class="function"><a name="new-1">new/1</a></h3>
<div class="spec">
<p><tt>new(Contents::[any()]) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Creates a new tape.</p>
 
  Contents are specified in the list argument and may be empty.
  The head is initialized to the beginning of the tape.
  Empty contents produces a null tape with no contents, though such a tape may be added to using <code>insert_before/2</code>, <code>insert_after/2</code>, <code>prepend/2</code>, and <code>append/2</code>.</p>

<h3 class="function"><a name="position-1">position/1</a></h3>
<div class="spec">
<p><tt>position(Tape::<a href="#type-tape">tape()</a>) -> integer()</tt></p>
</div><p><p>Returns the current position of the tape head.</p>
 
  The first cell is numbered 1.
  Returns 0 when tape is null.</p>

<h3 class="function"><a name="prepend-2">prepend/2</a></h3>
<div class="spec">
<p><tt>prepend(X::any(), Tape::<a href="#type-tape">tape()</a>) -> <a href="#type-tape">tape()</a></tt></p>
</div><p><p>Inserts a cell onto the beginning of the tape regardless of the position of the tape head.</p>
 
  When the tape is empty, the head of the resulting tape is set to the new cell.
  Otherwise, the tape head remains in its existing position.</p>

<h3 class="function"><a name="read-1">read/1</a></h3>
<div class="spec">
<p><tt>read(Tape::<a href="#type-tape">tape()</a>) -> {ok, any()} | null_tape</tt></p>
</div><p><p>Returns the contents of the tape cell under the tape head.</p>
 
  If tape is null, returns <code>null_tape</code>.</p>

<h3 class="function"><a name="write-2">write/2</a></h3>
<div class="spec">
<p><tt>write(X::any(), Tape::<a href="#type-tape">tape()</a>) -> {ok, <a href="#type-tape">tape()</a>} | null_tape</tt></p>
</div><p><p>Overwrites the contents of the cell under the tape head.</p>
 
  If tape is null, returns <code>null_tape</code>.</p>
<hr>

<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<p><i>Generated by EDoc, Jul 31 2007, 17:49:08.</i></p>
</body>
</html>