Category:CafeOBJ: Difference between revisions

m
No edit summary
 
(31 intermediate revisions by 2 users not shown)
Line 1:
{{language}}
 
==Basic Information==
CafeOBJ is a algebraic specification language.
It has an executable sub-language which is broadly similar to a first order subset of Haskell or ML. CafeOBJ has many advanced features including: multiple logics, flexible mix-fix 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.
CafeOBJ has many advanced features including: multiple logics, flexible mix-fix syntax, powerful and clear typing system with ordered sorts, parametric modules and views for instantiating the parameters, and module expressions, and more.
There are no libraries for arrays, lists, trees, or graphs, hence the user written list below. Many of theseCafeOBJ features are inherited from [http://en.wikipedia.org/wiki/OBJ3 OBJ3]
 
[httphttps://wwwcafeobj.ldl.jaist.ac.jp/cafeobjorg/ Download] ,
[httphttps://wwwcafeobj.jaist.ac.jporg/~t-seino/lectures/cafeobj-intro/en/index.html TutorialIntroduction] ,
[https://www.preining.info/blog/2018/04/specification-and-verification-of-software-with-cafeobj-part-1-introducing-cafeobj/ Tutorial] ,
[http://www.jaist.ac.jp/~ogata/lecture/i217/ Lectures] ,
[http://logicwww.pdmijaist.rasac.rujp/csclub~ogata/enlecture/nodei217/1819 Video-1Lectures] ,.
[https://equational.wordpress.com/2016/09/07/algebraic-specification/#more-4/ Blog].
[http://sel.ifmo.ru/seminar/cafeobj.webm Video-2] ,
 
===Examples===
 
<syntaxhighlight lang="$CafeOBJ">
 
 
===Examples===
<lang CafeOB>
-- Text file called say Hello.cafe ,contains the following
mod! HELLO-WORLD {
Line 23 ⟶ 21:
eq hello = "Hello World" .
}
-- Start CafeOBJ interactive session at command line
--> cafeobj
-- Bring *in* the file at CafeOBJ prompt
in hello.cafe
Line 30:
reduce hello .
-- Gives ("Hello World"):String
</syntaxhighlight >
</lang>
 
Below is a idiosyncratic sorting program. See [https://rosettacode.org/wiki/Sorting_algorithms/Quicksort#CafeOBJ] for more traditional quicksort program.
 
<syntaxhighlight lang="$CafeOBJ">
<lang CafeOB>
-- Run in CafeOBJ 1.5.5(PigNose0.99)
-- Here is a sorting program.
-- 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! SORTING-NAT {
pr(NAT) -- import
[Nat < StrgList ] -- Nat is a sub-sort of List
-- Simple space seperated list structure
op nil : -> Strg List
op _.___ : StrgList StrgList -> StrgList { 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.
ctransceq [swap] : (N . N') => (N' . N) if N' <= N and (N =/= N').
 
vars N N' : Nat
-- A very short sorting program using transitions in POA logic, which is a type of rewrite logic
ctrans [swap] : (N . N') => (N' . N) if N' <= N .
}
 
**> Sorting natural numbers using execreduce command
open SORTING-NAT .
execred (3 . 2 . 1) .
--> Gives (1 2 3):List
**> Sorting natural numbers using search command
red (9 3 6 12 1 20) .
**> we can use (show path N) with this command, where N is the nuber of possible states.
red--> (3Gives . 2 . 1) =(1,1)=>* (13 .6 29 12 . 320) .:List
red (3 . 2 . 1) =(1,2)=>* (1 . 2 . 3) .
red (3 . 2 . 1) =(1,3)=>* (1 . 2 . 3) .
**> search for any number of solutions at any depth
red (3 . 2 . 1) =(*,*)=>* (1 . 2 . 3) .
**> print the transitions from initial to goal state
show path 5
eof
</syntaxhighlight>
</lang>
 
===Pages in category CafeOBJ ===
 
[http://rosettacode.org/wiki/Remove_duplicate_elements#CafeOBJ Remove duplicate elements]
 
{{mylangbegin}}
{{mylang|CafeOBJ| Very Active}}
{{mylang|Haskell| Very Active}}
{{mylang|SQL| Very Active}}
{{mylangend}}
101

edits