% The following declaration is the key to having todo/1 persisted between pages.
:- session_predicate todo/1.

% update/1 maintains the state of the todo/1 predicate via assertions and retractions.
update(Get) :-
	member(todo=Todo, Get),
	assert(todo(Todo)).
update(Get) :-
	member(remove=Todo, Get),
	retract(todo(Todo)).
update(_).

/*<html>
<head>
     <title>PSP Demo</title>
</head>
<body>

<a href="template.prolog?t=psp#psp">Back</a><br>
<a href="cookies.html">View Source</a><br><br>

<h1>To Do List</h1>
<form action="cookies.prolog" method="GET">
	<input type="text" name="todo">
	<input type="submit" value="Add">
</form>
<br>
<table>
<?, 
update(Get),
forall(
	todo(Todo),
	?>
		<tr>
		<td><?= Todo ?></td>
		<td>
			<form action="cookies.prolog?remove=<?= Todo ?>" method="POST">
				<input type="submit" value="done">
			</form>
		</td>
		</tr>
	<?
)
,?>
</table>
</body>
</html>*/