Mopteh icon

Moplinux

Mopteh | PRO | 02/10/10 09:28:08 AM UTC | 0 ⭐ | 277 👁️ | Never ⏰ | []
text |

3.32 KB

|

None

|

0 👍

/

0 👎

fmod NAT-ADD is
 	sort Nat .			--- hva vi opererer med
 	op 0 : -> Nat [ctor] .		--- tar en ikkenoe, lager s� et naturlig tall
	op s : Nat -> Nat [ctor] .	--- gj�r om en nat til en annen nat
	op _+_ : Nat Nat -> Nat .	--- legger sammen to nat, og returnerer en annen nat.
 	vars M N : Nat .		--- variabler m og n blir deklareret som naturlige tall
 	eq 0 + M = M .			--- null pluss noe er noe
	eq s(M) + N = s(M + N) .	--- en mer enn m pluss n er det samme som en mer enn m og n
 endfm
 fmod NAT-MULT is
 	protecting NAT-ADD .
 	op _*_ : Nat Nat -> Nat [prec 31] .
 	vars M N : Nat .
 	eq 0 * M = 0 .
	eq s(M) * N = N + M * N .
 endfm
 fmod NAT-MINUS is
 	protecting NAT-MULT .
 	op _-_ : Nat Nat -> Nat .
 	vars M N : Nat .
 	eq 0 - N = 0 .
	eq s(M) - 0 = s(M) .
	eq s(M) - s(N) = M - N .
 endfm
 fmod MONUS is
 	protecting NAT-MINUS .
 	op _monus_ : Nat Nat -> Nat .
 	vars M N : Nat .
 	eq M monus 0 = M .
	eq 0 monus M = 0 .
	eq s(M) monus s(N) = M monus N .
 endfm
 fmod BOOLEAN is
 	sort Boolean .
 	op true : -> Boolean .
	op false : -> Boolean .
	op not_ : Boolean -> Boolean .
	op _and_ : Boolean Boolean -> Boolean .
	op _or_ : Boolean Boolean -> Boolean .
 	var A : Boolean .
 	eq not true = false .
	eq not false = true .
	eq true and A = A .
	eq false and A = false .
	eq true or A = true .
	eq false or A = A .
 endfm
 fmod LIST is
 	protecting BOOLEAN .
	protecting MONUS .
 	sorts List .
 	op nil : -> List [ctor] .
	op __ : List Nat -> List [ctor] .
 	op length : List -> Nat .
	op concat : List List -> List .
	op insertFront : Nat List -> List .
	ops first last : List -> Nat .
	op rest : List -> List .
	op empty? : List -> Boolean .
	op reverse : List -> List .
 	vars N N' : Nat .
	vars L L' : List .
	---vars true false : Boolean .
 	eq length(nil) = 0 .
	eq length(L N) = s(length(L)) .
	eq concat(L, nil) = L .
	eq concat(L, L' N) = concat(L, L') N .
	eq first(nil) = 0 .                 *** Default/error value
	eq first(nil N) = N .
	eq first(L N N') = first(L N) .
 	--- oppgave 20 (empty?, rest, last, reverse) ---
 	eq last(nil) = 0 .
	eq last(nil N) = N .
	eq last(L N' N) = last(L N) .
 	eq rest(nil) = nil .
	eq rest(nil N) = nil .
	eq rest(L N) = rest(L) N .
 	eq reverse(nil) = nil .
	eq reverse(L)  = reverse(rest(L)) first(L) .
 	eq empty?(nil) = true .
	eq empty?(L) = false .
 endfm
 fmod BST is
 	protecting LIST .
 	sort BinTree .
 	op niltree : -> BinTree [ctor] .
	op bintree : BinTree Nat BinTree -> BinTree [ctor] .
	ops preorder inorder postorder : BinTree -> List . *** Traverse the tree
	ops size weight : BinTree -> Nat .
	op isSearchTree : BinTree -> Boolean .
	op reverse : BinTree -> BinTree .
 	vars BT BT' : BinTree .
	vars N N' : Nat .
 	eq preorder(niltree) = nil .
	eq preorder(bintree(BT, N, BT')) =
		insertFront(N,           *** Root first, then left and right subtrees:
			concat(preorder(BT), preorder(BT'))) .
 	eq size(niltree) = 0 .
	eq size(bintree(BT, N, BT')) = s(size(BT) + size(BT')) .
 	--- ====================================================
 	eq inorder(niltree) = nil .
	eq inorder(bintree(BT, N, BT')) = insertFront(N, concat(preorder(BT), preorder(BT'))) .
  	eq postorder(niltree) = nil .
  	eq reverse(niltree) = niltree .
  	eq weight(niltree) = 0 .
 endfm

Comments