Welcome to the Dictionary of Programming Languages, a compendium
of computer coding methods assembled to provide information and
aid your appreciation for computer science history.
Browse the dictionary by clicking on a section:
A
B
C
D
E
F
G
H
I
JK
L
M
N
O
P
QR
S
T
UV
WXYZ+
Get a full dump of the dictionary:
List of Names
Short Form
Full Form
#include <stdio.h>
/* count lines of standard input */
main(int argc, char *argv[]) {
char lbuf[256];
int lcnt;
for(lcnt = 0; fgets(lbuf,sizeof(lbuf) - 1, stdin); cnt );
printf("%d lines\n", lcnt);
exit(0);
}
// Adapted from the paper "The C* Parallel
// Programming Language" by Andrews and Barszcz, 1992.
// Skyline Matrix Problem solution
#define N 4
#define BIG 1024
domain Matrix { float a; int i; int j; } A[N][N];
domain RHS { float b; int i; } B[N];
domain Skyline { float s; int i; int j; } SKY[BIG];
domain Vector { float element; int start; } I[N], J[N];
void main() {
int k,l,m;
float x[N], element;
float rowsum, pivot;
int NonZeros;
readMatrix();
[domain RHS].{ i = (int)(this - &B[0]); }
[domain Matrix].{
int offset = (int) (this - &A[0][0]);
i = offset / N; j = offset % N;
}
for(k = 0; k<N; k ) {
rowsum = 0;
[domain Matrix].{ if (i == k) rowsum = a; }
B[k].b = rowsum;
}
NonZeros = map(); /* put matrix in skyline form? */
for(k=0; k<(N-1); k ) {
[domain Skyline].{
if ((i ==k) && (j==k)) Pivot ,= s;
if (((i>k) && (j==k)) && (I[i].start <= k)) {
s = s / Pivot;
I[i].element = s;
}
if (((i==k) && (j > k)) && (J[j].start <= k)) J[j].element = s;
if (((i > k) && (j > k)) &&
((I[i].start <= k) && J[j].start <= k))
s = s - (I[i].element * J[j].element);
}
}
for(k = (N-1); k > 0; k--) {
[domain Skyline].{
if (((i <= k) && (j ==k)) && (J[k].start <= k))
J[j].element = s;
}
x[k] ,= B[k].b / J[j].element;
[domain Skyline].{
if ((i < k) && (J[k].start < k))
b = b - (J[j].element * x[k]);
}
}
[domain Skyline].{ if (i == 0 && j == 0) Pivot ,= s; }
x[0] = B[0].b / Pivot;
printf("x\n");
for(k = 0; k<N; k ) printf("%f\n",x[k]);
}
// This is just a placehold until I write a
// better example.
#include <iostream.h>
#include <String.h>
main(int argc, char *argv[])
{
String *s1;
s1 = new String("Hello World!");
cout << *s1 << endl << "Length is:" << s1->length() << endl;
}
-- Adapted from Cecil Project v2.0 distribution tests
method copy_file_using_streams(name1@:string, name2@:string):void {
let f1:unix_file := open_file(name1, open_for_reading);
let f2:unix_file := open_file(name2, create_for_writing);
(name1 || " is " || if(f1.is_unreadable, {"not "}, {""}) || "readable").
print_line;
(name2 || " is " || if(f2.is_unreadable, {"not "}, {""}) || "readable").
print_line;
while({ f1.before_end }, { f2.next := f1.next; });
close(f1);
close(f2);
}
let var name1 := ask("Name of input file: ");
let var name2 := ask("Name of output file: ");
print("Copying using streams...");
copy_file_using_streams(name1, name2);
print_line(" done.");
<CFSWITCH EXPRESSION="#ThisTag.ExecutionMode#">
<CFCASE VALUE="start">
<CFIF StructIsEmpty(attributes.EMPINFO)>
<CFOUTPUT>Error. No employee data was passed.</CFOUTPUT>
<CFEXIT METHOD="ExitTag">
<CFELSE>
<!--- Add the employee --->
<CFQUERY NAME="AddEmployee" DATASOURCE="cfsnippets">
INSERT INTO Employees
(FirstName, LastName, Email, Phone, Department)
VALUES
<CFOUTPUT>
(
#StructFind(attributes.EMPINFO, "firstname")# ,
#StructFind(attributes.EMPINFO, "lastname")# ,
#StructFind(attributes.EMPINFO, "email")# ,
#StructFind(attributes.EMPINFO, "phone")# ,
#StructFind(attributes.EMPINFO, "department")#
)
</CFOUTPUT>
</CFQUERY>
</CFIF>
<CFOUTPUT><HR>Employee Add Complete</CFOUTPUT>
</CFCASE>
</CFSWITCH>
-- still looking for a good code example
#include <cilk.h>
#include <stdlib.h>
#include <stdio.h>
cilk int fib(int n)
{
if (n < 2)
return (n);
else {
int x, y;
x = spawn fib(n - 1);
y = spawn fib(n - 2);
sync;
return (x y);
}
}
cilk int main(int argc, char *argv[])
{
int n, result;
n=atoi(argv[1]);
result=spawn fib(n);
sync;
printf("Result: %d\n", result);
return 0;
}
// Very simple Fibonnacci example adapted from v2.1
// "Introduction to the CLAIRE Programming Language"
begin(fib_module)
fib[n:(0..10)] : integer := (if (n < 2) 1 else fib[n - 1] fib[n - 2])
test() -> (for i in (0 .. 10) printf("fib(~S) = ~S\n",i,fib[i])
end(fib_module)
% Driver and function to compute factorials
% from the PCLU distribution.
start_up = proc ()
pi: stream := stream$primary_input()
po: stream := stream$primary_output()
while true do
stream$puts(po, "Enter an integer (or RETURN to exit): ")
s: string := stream$getl(pi)
if string$empty(s) then break end
n: int := int$parse(s)
except when bad_format:
stream$putl(po, "Illegal integer")
end
stream$putl(po, int$unparse(n) || "! = " || int$unparse(factorial(n)))
except when negative:
stream$putl(po, "Integer must be positive")
when overflow:
stream$putl(po, "Overflow")
end
end
end start_up
factorial = proc (n: int) returns (int) signals (negative, overflow)
if n < 0 then signal negative end
if n = 0 then return(1) end
return(n*factorial(n-1))
resignal overflow
end factorial
Insufficient documentation for producing a reasonable example.
IDENTIFICATION DIVISION
PROGRAM-ID. SUM-OF-PRICES.
AUTHOR. TERENCE-PRATT.
SOURCE. PROGRAMMING-LANGUAGES-2ND-EDITION-1984
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INP-DATA ASSIGN TO INPUT.
SELECT RESULT-FILE ASSIGN TO OUTPUT.
DATA DIVISION.
FILE SECTION.
FD INP-DATA LABEL RECORD IS OMITTED.
01 ITEM-PRICE
02 ITEM PICTURE X(30).
02 PRICE PICTURE 9999V99.
02 FILLER PICTURE X(44).
FD RESULT-FILE LABEL RECORD IS OMITTED.
01 RESULT-LINE PICTURE X(132).
WORKING-STORAGE SECTION.
77 TOT PICTURE 999999V99, VALUE 0, USAGE IS COMPUTATIONAL.
77 COUNT PCITURE 9999, VALUE 0, USAGE IS COMPUTATIONAL.
01 SUM-LINE.
02 FILLER VALUE ' SUM ='PICTURE X(12).
02 SUM-OUT PICTURE $$,$$$,$$9.99.
02 FILLER VALUE ' NO. OF ITEMS ='PICTURE X(21).
02 COUNT-OUT PICTURE ZZZ9.99.
01 ITEM-LINE.
02 ITEM-OUT PICTURE X(30).
02 PRICE-OUT PICTURE ZZZ9.99.
PROCEDURE DIVISION.
START.
OPEN INPUT INP-DATA AND OUTPUT RESULT-FILE.
READ-DATA.
READ INP-DATA AT END GO TO PRINT-LINE.
ADD PRICE TO TOT.
ADD 1 TO COUNT.
MOVE PRICE TO PRICE-OUT.
MOVE ITEM TO ITEM-OUT.
WRITE RESULT-LINE FROM ITEM-LINE.
GO TO READ-DATA.
PRINT-LINE.
MOVE TOT TO SUM-OUT.
MOVE COUNT TO COUNT-OUT.
WRITE RESULT-LINE FROM SUM-LINE.
CLOSE INP-DATA AND RESULT-FILE.
STOP RUN.
;; An example of array search from the common
;; lisp standard
(defun finder (obj vec start end)
(let ((range (- end start)))
(if (zerop range)
(if (eql obj (aref vec start))
obj
nil)
(let ((mid ( start (round (/ range 2)))))
(let ((obj2 (aref vec mid)))
(if (< obj obj2)
(finder obj vec start (- mid 1))
(if (> obj obj2)
(finder obj vec ( mid 1) end)
obj)))))))
// Solution to Hamming's problem in Clean, // generate an infinite sorted stream of numbers // of the form (2^n)*(3^m)*(5*p). From the examples // distributed with Concurrent Clean v1.2. Ham::[Int] Ham = y where y = [1:merge (merge (map ((*) 2) y) (map ((*) 3) y)) (map ((*) 5) y)] merge [] [] = [] merge f [] = f merge [] f = f merge f=:[a:b] g=:[c:d] | a<c = [a:merge b g] | a==c = merge f d | otherwise = [c: merge f d] Start::[Int] Start = take NrElements Ham NrElements :== 300 // Size of finite sample to take.
{ A small example monitor and process from Hansen's 1993 }
{ paper given at HOPL-II. }
type linebuffer =
monitor
var contents : line;
full : Boolean;
sender, receiver : queue;
procedure entry receive(var text : line);
begin
if not full then delay(receiver);
text := contents; full := false;
continue(sender);
end;
procedure entry send(text : line);
begin
if full then delay(sender);
contents := text; full := true;
continue(receiver);
end;
begin full := false;
end; { linebuffer }
type printerprocess =
process(buffer: linebuffer)
var param : ioparam;
text : line;
begin
param.operation := output;
cycle
buffer.receive(text);
repeat io(text,param,printdevice)
until param.status = complete;
end
end;
WITHOBJECT "CorelPhotoPaint.Automation.7"
.SetDocumentInfo 96, 96
.MaskSelectAll
.EditCopy
.ImagePapersize 192, 96, 0, 0, 5, 255, 255, 255, 0
.MaskInvert
.EditPasteIntoSelection
.MaskChannelAdd "Alpha 1"
.MaskBorder 4, 1
.ImageBCI -20, 0, 0
.EndColorEffect
.MaskChannelToMask 0, 0
offset% = 50
BEGIN DIALOG Dialog4 182, 79, "Corel SCRIPT Dialog"
SPINCONTROL 91, 12, 76, 18, offset%
TEXT 28, 17, 55, 11, "Offset amount:"
OKBUTTON 56, 50, 69, 21
END DIALOG
X = Dialog(Dialog4)
.EffectOffset 0, offset%, TRUE, 0
.MaskRemove
END WITHOBJECT
#!/bin/csh
# A simple csh script to find a command on
# the directories listed in the environment
# variable PATH, and print out information
# about it.
set cmd=$1
if ("$cmd" == "") then
echo "Usage: findcmd commandname"
exit 1
endif
set cnt=0
foreach dir ($path)
set check="$dir/$cmd"
if (-x "$check" && ! (-d "$check")) then
file $check
ls -ldg $check
set cnt=$cnt 1
endif
end
if ($cnt == 0) then
echo "Sorry, command $cmd not found."
exit 1
else
exit 0
endif
PHIL = *[ ...During n'th lifetime
THINK;
room!enter( );
fork(i)!pickup( );
fork((i 1) mod 5)!pickup;
EAT;
fork(i)!putdown( );
fork((i 1) mod 5)!putdown( );
room!exit( );
]
FORK = *[
phil(i)?pickup( ) -> phil(i)?putdown( );
[]
phil((i - 1) mod 5)?pickup( ) ->
phil((i - 1) mod 5)?putdown( );
ROOM = occupancy:integer; occupancy = 0;
*[(i:0..4)phil(i)?enter( ) ->
occupancy := occupancy 1;
[]
(i:0..4)phil(i)?exit( ) ->
occupancy := occupancy - 1;
MAIN = [room::ROOM || fork(i:0..4)::FORK ||
phil(i:0..4)::PHIL].
* A subroutine to draw 1-d chaos, from a
* sample program by Bruce Sherwood.
unit chaos
f: pop, rate $$ population and growth rate
i: n, TRIES=40, base=8
i: usecolor
f: h, s, v
calc usecolor := (zncolors >= 8 base)
palette zred,100,0,0,zwhite
if usecolor
loop n := 0,7 $$ make hues from blue to red
getrgb 240[1-(n 1)/8],100,100; h, s, v
palette base n,h,s,v
endloop
endif
color zwhite
do graph
color zred
loop rate := 2.7, 3.99, .01
calc pop := .1 $$ starting population
loop n := 1, TRIES
* New population is rate times current population
* times a resource-limiting factor (1-pop):
calc pop := rate*pop*(1-pop)
if usecolor
color base int(8(n-1)/TRIES)
elseif TRIES-n > 8
reloop
endif
gfill rate,pop;rate .01,pop .005
endloop
endloop
The syntax of Curry is complex, compact, and similar to that of Haskell. Each statement of a Curry program is an equation or predicate. Executing a Curry program consists of simplifying equations and expressions until a particular specified goal is reached or a particular solution is obtained. Primitive data types supported by Curry include booleans, integers, reals, chars, and strings. Aggregate and specialized data types include tuples, lists, functions, and constraints. Oddly enough, Curry uses the same comment syntax as Ada. The module construct serves to encapsulate libraries of functions, data types, and expressions. The module seems to be the only program structuring facility in Curry.
Like many functional languages, Curry supports a declarative I/O model. This kind of model basically represents input and output operations as expressions involving 'the World'.
Some of the advanced features of Curry are listed below.
As an academic project, implementations of Curry are available free. Documentation is available on the web, but almost exclusively in DVI format.
Several implementations of Curry exist. The most viable one seems to be PACS, the Portland Aachen Curry System. It is a compiler that translates Curry programs into various intermediate forms: Prolog or Java. Free downloads of PACS for UNIX systems are available from RWTH Aachen. Other Curry implementations are interpreters written in Prolog.
There has been a trend in the 1990s to try to integrate ideas from some of the most powerful computer programming research paradigms. Curry, like LEDA and NIAL, is an example of this trend.
-- quicksort using higher-order functions:
-- filter elements in a list (predefined as `filter'):
filter_ :: (a -> Bool) -> [a] -> [a];
filter_ _ [] = []
filter_ p (x:xs) = if p x then x : filter_ p xs
else filter_ p xs
qsort :: [Int] -> [Int]
qsort [] = []
qsort (x:l) = qsort (filter (< x) l) x : qsort (filter (>= x) l)
Descriptions in this dictionary are ©1997-99 Neal Ziring. Some examples copyright of their respective authors. Some technologies and languages are trademarked. Permission to copy descriptions is granted as long as authorship credit is preserved.
Comments on this dictionary, corrections and suggestions, are all welcome. Please use email, the address is ziring@home.com
[Ziring MicroWeb Home] [Dictionary Start] [Sign Guestbook]
Dictionary and script maintained by Neal Ziring, last major modifications 3/18/98. Most recent additions to dictionary and master list, 1/00.