2006-10-01から1ヶ月間の記事一覧

演算 () を実現する

VDM++ での演算 () に準拠するように、メソッド VDM_Map.__getitem__ を実現します。class VDM_Map: def __getitem__(m,d): """ m(d) ; map A to B * A -> B ; ; Map apply ; yields the information value whose key is d. d must ; be in the domain of m.…

演算 comp を実現する

VDM++ での演算 comp に準拠するように、メソッド VDM_Map.comp を実現します。class VDM_Map: def comp(m1,m2): """ m1 comp m2 ; map B to C * map A to B -> map A to C ; ; Map composition ; yields the the map that is created by composing m2 ; ele…

事例:演算 comp

VDM++ での演算 comp に準拠した事例(VDM_Map.comp)を紹介します。 m1 = VDM_Map({1:"alpha",2:"beta"}) m2 = VDM_Map({"A":1,"B":2}) print ">>> %s comp %s"%(m1,m2) X = m1.comp(m2) print X; assert X == VDM_Map({"A":"alpha","B":"beta"})2つの写像…

事例:演算 ()

VDM++ での演算 () に準拠した事例(演算子 [])を紹介します。 m = VDM_Map({"A":1,"B":2,"C":3}) d = "C" print ">>> %s(%s)"%(m,d) X = m[d] print X; assert X == 3写像 m において、指定したキー d に対応する値を得るには、演算子 [] を利用します。こ…

演算 ** を実現する

VDM++ での演算 ** に準拠するように、メソッド VDM_Map.__pow__ を実現します。class VDM_Map: def __pow__(m,n): """ m ** n ; (map A to A) * nat -> map A to A ; ; Map iteration ; yields the map where m is composed with itself ; n times. n=0 yie…

事例:演算 **

VDM++ での演算 ** に準拠した事例(演算子 **)を紹介します。 m = VDM_Map({1:2,2:3,3:4,4:1}) n = 2 print ">>> %s ** %s"%(m,n) X = m ** n print X; assert X == VDM_Map({1:3,2:4,3:1,4:2})同一写像を繰り返し適用した写像を得るには、演算子 ** を利…

写像の適用

VDM++ の map 型には、写像の適用を定義できます。VDM++ では、次のように表現します。 {'A' |-> 1, 'B' |-> 2, 'C' |-> 3}('C') = 3この写像にキー 'C' を適用した値は 3 になります。ただし、指定したキーは、定義域に含まれるものとします。 {1 |-> "alph…

VDM++《19》Map に対する演算(4)

Shall_we_Agile = Java.use(better, Python) # Swing by VDM++《記事一覧》 改訂♪2008/09/14《承前》

事例:演算 <-:

VDM++ での演算 VDM_Map.domBy)を紹介します。 m = VDM_Map({"A":1,"B":2}) s = VDM_Set(["A","C"]) print ">>> %s X = m.domBy(s) print X; assert X == VDM_Map({"B":2})写像 m の定義域から集合 s の要素を削除した写像を得るには、メソッド domBy を利…

事例:演算 :->

VDM++ での演算 :-> に準拠した事例(VDM_Map.rngBy)を紹介します。 m = VDM_Map({"A":1,"B":2}) s = VDM_Set([1,3]) print ">>> %s :-> %s"%(m,s) X = m.rngBy(s) print X; assert X == VDM_Map({"B":2})写像 m の値域から集合 s の要素を削除した写像を得…

事例:演算 :>

VDM++ での演算 :> に準拠した事例(VDM_Map.rngTo)を紹介します。 m = VDM_Map({"A":1,"B":2}) s = VDM_Set([1,3]) print ">>> %s :> %s"%(s,m) X = m.rngTo(s) print X; assert X == VDM_Map({"A":1})写像 m の値域を集合 s の要素に限定した写像を得るに…

事例:演算 <:

VDM++ での演算 m = VDM_Map({"A":1,"B":2}) s = VDM_Set(["A","C"]) print ">>> %s domTo(s) print X; assert X == VDM_Map({"A":1})写像 m の定義域を集合 s の要素に限定した写像を得るには、メソッド domTo を利用します。このコードを実行すると、>>> {…

演算 :> および :-> を実現する

VDM++ での演算 :> および :-> に準拠するように、メソッド VDM_Map.rngTo/VDM_Map.rngBy を実現します。class VDM_Map: def rngTo(m,s): """ m :> s ; map A to B * set of B -> map A to B ; ; Range restricted to ; creates the map consisting of the e…

演算 <: および <-: を実現する

VDM++ での演算 class VDM_Map: def domTo(m,s): """ s map A to B ; ; Domain restricted to ; creates the map consisting of the elements in m ; whose key is in s. s need not be a subset of dom ; m. """ return VDM_Map(m._domain(dom(m).inter(s))…

定義域と値域の限定

VDM++ の map 型には、定義域および値域を限定/削除した、新たな写像を定義できます。VDM++ では、次のように表現します。 {'A', 'C'} 1, 'B' |-> 2} = {'A' |-> 1}写像 {'A' |-> 1, 'B' |-> 2} の定義域を、キー集合 {'A', 'C'} の要素に限定すると {'A' |-…

VDM++《18》Map に対する演算(3)

Shall_we_Agile = Java.use(better, Python) # Swing by VDM++《記事一覧》 改訂♪2008/09/12《承前》

演算 merge を実現する

VDM++ での演算 merge に準拠するように(モジュール VDM_Map で)関数 merge を実現します。def merge(set1): """ merge ms ; set of (map A to B) -> map A to B ; ; Distributed merge ; yields the map that is constructed by merging all ; the maps i…

事例:演算 merge

VDM++ での演算 merge に準拠した事例を紹介します。 m1 = VDM_Map({"A":1,"B":2}) m2 = VDM_Map({"A":1,"C":3}) ms = VDM_Set((m1,m2) ) print ">>> merge %s"%ms X = merge(ms) print X; assert X == VDM_Map({"A":1,"B":2,"C":3})(集合 ms の要素として…

演算 ++ を実現する

VDM++ での演算 ++ に準拠するように、メソッド VDM_Map.__add__ を実現します。class VDM_Map: def __add__(m1,m2): """ m1 ++ m2 ; map A to B * map A to B -> map A to B ; ; Override ; overrides and merges m1 with m2, i.e. it is like a ; merge ex…

事例:演算 ++

VDM++ での演算 ++ に準拠した事例(演算子 +)を紹介します。 m1 = VDM_Map({"A":1,"B":2}) m2 = VDM_Map({"A":1,"C":3}) print ">>> %s ++ %s"%(m1,m2) X = m1 + m2 print X; assert X == VDM_Map({"A":1,"B":2,"C":3})写像 m1 に m2 を上書きした写像を得…

演算 munion を実現する

VDM++ での演算 munion に準拠するように、メソッド VDM_Map.munion を実現します。class VDM_Map: def munion(m1,m2): """ m1 munion m2 ; (map A to B) * (map A to B) -> map A to B ; ; Merge ; yields a map combined by m1 and m2 such that ; the res…

事例:演算 munion

VDM++ での演算 munion に準拠した事例(VDM_Map.munion)を紹介します。 m1 = VDM_Map({"A":1,"B":2}) m2 = VDM_Map({"A":1,"C":3}) print ">>> %s munion %s"%(m1,m2) X = m1.munion(m2) print X; assert X == VDM_Map({"A":1,"B":2,"C":3})写像 m1 および…

写像の併合

VDM++ の map 型には、 複数の写像をもとに新たな写像を定義できます。VDM++ では、次のように表現します。 {"A" |-> 1, "B" |-> 2} munion {"A" |-> 1, "C" |-> 3} = {"A" |-> 1, "B" |-> 2, "C" |-> 3}2つの写像を併合した写像は {"A" |-> 1, "B" |-> 2, …

VDM++《17》Map に対する演算(2)

Shall_we_Agile = Java.use(better, Python) # Swing by VDM++《記事一覧》 改訂♪2008/09/07《承前》

演算 dom/rng を実現する

VDM++ での演算 dom/rng に準拠するように(モジュール VDM_Map で)関数 dom/rng を実現します。def dom(m): """ dom m ; map A to B -> set of A ; ; Domain ; yields the domain (the set of keys) of m. """ return VDM_Set(m.dict.keys())関数 dom は、…

事例:演算 rng

VDM++ での演算 rng に準拠した事例を紹介します。 m = VDM_Map({"A":1,"B":2,"C":3}) print ">>> rng %s"%(m) X = rng(m) print X; assert X == VDM_Set(range(1,4))写像 m の値域を得るには、関数 rng を利用します。このコードを実行すると、>>> rng {'A'…

事例:演算 dom

VDM++ での演算 dom に準拠した事例を紹介します。 m = VDM_Map({"A":1,"B":2,"C":3}) print ">>> dom %s"%(m) X = dom(m) print X; assert X == VDM_Set("ABC")写像 m の定義域を得るには、関数 dom を利用します。このコードを実行すると、>>> dom {'A' |-…

定義域と値域

VDM++ での map 型には、写像の定義域と値域を定義できます。VDM++ では、次のように表現します。 dom {'A' |-> 1, 'B' |-> 2, 'C' |-> 3} = {A, B, C}写像 {'A' |-> 1, 'B' |-> 2, 'C' |-> 3} の定義域は {A, B, C} になります。 rng {'A' |-> 1, 'B' |-> 2…

VDM++《16》Map に対する演算(1)

Shall_we_Agile = Java.use(better, Python) # Swing by VDM++《記事一覧》 Map に対する演算 《著》伊藤うさぎ《監修》小泉ひよ子とタマゴ倶楽部初出♪2004/01/29改訂♪2008/09/05

交換法則/結合法則は成立するか

単体テストには、次のようなコードの断片が含まれます。 s1 = VDM_Set)((1,2))( s2 = VDM_Set)((2,3))( print "s1: %s"%s1 print "s2: %s"%s2 print ">>> s1 \ s2" print s1 - s2 print ">>> s2 \ s1" print s2 - s1交換法則が成立しないことを確認するため…