Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/tests/nofib/spectral/primetest/Main.lhs

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


\documentstyle[11pt,a4,fpart,fpbib]{article}
\def\author{David Lester}
\def\fromemail{dlester@@cs.man.ac.uk}
\def\doctype{Benchmark-0002}
\def\title{Probabalistic Primality Testing}
% Filled in on creation of document: \author, \fromemail, \doctype and \title 

% RCS amended stuff
%$Log: Main.lhs,v $
%Revision 1.1  2004/08/05 11:13:39  malcolm
%Add a regression testsuite for the nhc98 compiler.  It isn't very good,
%but it is better than nothing.  I've been using it for about four years
%on nightly builds, so it's about time it entered the repository!  It
%includes a slightly altered version of the nofib suite.
%Instructions are in the README.
%
%Revision 1.2  1996/07/25 21:32:56  partain
%Bulk of final changes for 2.01
%
%Revision 1.1  1996/01/08 20:04:20  partain
%Initial revision
%
%Revision 1.2  92/06/30  15:56:32  dlester
%Added command intepreter.
%
%Revision 1.1  92/06/30  13:57:47  dlester
%Initial
%
%$Author: malcolm $
%$State: Exp $
%$Revision: 1.1 $
%$Date: 2004/08/05 11:13:39 $

% Constant stuff (at the moment).

\def\acknowledge{}	% delete this if you have no affiliation acks
\def\fromaddress{Functional Programming Group,\\Department of Computer Science,
Manchester University,\\Oxford Road,
Manchester M13 9PL, UK.}

\rcsheadings{}		% Prints RCS info at top of each page
			% ... delete if not wanted.
\begin{document}
\fptitle{}
\keywords{Primality, Probabalistic Algorithms}

\section{Command Interpreter}

> module Main where
> import IntLib
> import Random
> import Prime

Let's begin by giving Lester's line based command intepreter for
programs with @state@.

> main = getContents >>= \ cts -> sequence (map putStr (process (lines cts)))

The @process@ function takes a list of input lines and produces a list
of output lines.

> process :: [String] -> [String]
> process = doInput initState

To do this we consider each input line in turn in @doInput@; this
passes along the @state@.

> doInput :: State -> [String] -> [String]
> doInput state []     = []
> doInput state (l:ls) = doLine l (\state -> doInput state ls) state

The @doLine@ function processes an individual line.

> doLine :: String -> (State -> [String]) -> State -> [String]
> doLine cs cont rs
>  = if t then "Probably prime": rest else "Composite": rest
>    where n        = readInteger cs
>          (t, rs') = multiTest 100 rs n
>          rest     = cont rs'

And, for the particular problem we have in mind, we make the following
definitions.

> type State = [Int]
> initState  = randomInts 111 47

\input{Prime}
\input{Random}
\input{IntLib}
\end{document}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].