Category:CafeOBJ
This programming language may be used to instruct a computer to perform a task.
See Also: 


Basic Information
CafeOBJ is a algebraic specification language. It has an executable sublanguage which is broadly similar to a first order subset of Haskell or ML. CafeOBJ has many advanced features including: multiple logics, flexible mixfix syntax, powerful and clear typing system with ordered sorts, parametric modules and views for instantiating the parameters, and module expressions, and more. CafeOBJ is primarily a first order specification language which can also be used as a functional programming language. Being first order, there are no higher order functions such as map. Higher order functions can be simulated to some degree using paramterized modules. CafeOBJ includes a minimal library of basic types such as natural numbers, integers, floating point number, and character strings. There are no libraries for arrays, lists, trees, or graphs, hence the user written list below. Many of CafeOBJ features are inherited from OBJ3
Download , Introduction , Tutorial , Lectures. Blog.
Examples
 Text file called say Hello.cafe ,contains the following
mod! HELLOWORLD {
pr(STRING)
op hello : > String
eq hello = "Hello World" .
}
 Start CafeOBJ interactive session at command line
> cafeobj
 Bring *in* the file at CafeOBJ prompt
in hello.cafe
 Open the HELLOWORLD module
open HELLOWORLD
 Execute with the reduce command
reduce hello .
 Gives ("Hello World"):String
Below is a idiosyncratic sorting program. See [1] for more traditional quicksort program.
 Run in CafeOBJ 1.5.5(PigNose0.99)
 System settings
full reset
set step off
set print mode :fancy
set stats off
set verbose off
set quiet on
 Here is a one line sorting program.
mod! SORTINGNAT {
pr(NAT)  import
[Nat < List ]  Nat is a subsort of List
 Simple space seperated list structure
op nil : > List
op __ : List List > List { assoc id: nil }
vars N N' : Nat
 The program is in the form of a single conditional equation, which will swap N and N' if N is larger or equal to N'.
 There is no need for an intermediate variable to do the swap.
ceq [swap] : (N N') = (N' N) if N' < N and (N =/= N').
}
**> Sorting natural numbers using reduce command
open SORTINGNAT .
red (3 2 1) .
> Gives (1 2 3):List
red (9 3 6 12 1 20) .
> Gives (1 3 6 9 12 20):List
eof
Pages in category "CafeOBJ"
The following 3 pages are in this category, out of 3 total.