Iconミニ講座 あまり(procedure構成)
ライブラリ整理の際、ちょっと遊んでみましたので、ご参考に。
テーブルをリストの要素で参照する procedureの3つの例です。
-----^ PROC01.ICN ( date:03-08-29 time:23:38 ) -------------<cut here
####################
# テーブル参照プログラム例
####################
# proc01.icn Rev.1.1 2003/08/29 windy 風つかい H.S.
# TS Network TSfree
# This file is in the public domain.
procedure main()
T := table() # table生成
T["a"] := "AA" ; T["b"] := "BB" ; T["c"] := "CC" # データ登録
# ↓データ1 # ↓データ2
L := [["a","b","c"],["a","d","c"]] # テストデータ
# procedure のテスト procedureを引数にして、procedureを呼ぶ。
test(tbl_ref1,T,L)
test(tbl_ref2,T,L)
test(tbl_ref3,T,L)
end
# procedureのテスト
# arg [1]: procedure
# [2]: table テスト用 table
# [3]: list テスト用 list
procedure test(prcdr,T,L)
write(image(prcdr)) # procedure名
every L1 := !L do { # テスト用 listからデータを取り出して
every writes(" ",!L1) # 書き出し
writes(" -> ")
L2 := prcdr(T,L1) | ["error"] # 処理結果
every writes(" ",!L2) # 処理結果書き出し
write()
}
write("----- ----- -----") # 仕切線
end
###################
# Table参照し、結果を list連結
###################
# arg [1]: table key -> value
# [2]: list 参照する要素の list 例:["abc","def",...]
# value : list table参照結果を格納 例:["ABC","DEF",...]
# Usage : L := tbl_ref(T,L)
# args[2]の 要素のいずれかが tableに存在しなければ、fail
# 条件が全て揃った場合だけ結果を返す(いずれかの条件が成立しなかった場合は、
# 全体を failさせる。)には、その部分を procedureにすること。
# 再帰
procedure tbl_ref1(T,L) # ↓ \xは存在すればその値、なければ fail
return if *L = 1 then [ \T[ L[1] ] ] #←listの最後なら再帰終了
else [ \T[ L[1] ] ] ||| tbl_ref1(T,L[2:0])
end # listの連結 ↑ ↑最後でなければ、再帰
# every
procedure tbl_ref2(T,L) # <- この辺が分かりやすいかな。
L1 := []
every x := !L do put(L1,\T[x]) | fail # いずれか辞書になければ、fail
return L1
end
# whileループ
procedure tbl_ref3(T,L)
L1 := []
while x := get(L) do put(L1,\T[x]) | fail # いずれか辞書になければ、fail
return L1
end
-----$ PROC01.ICN ( lines:65 words:234 ) -------------------<cut here
動かすとこんな風です。
-----^ PROC01 ( date:03-08-29 time:23:38 ) -----------------<cut here
procedure tbl_ref1
a b c -> AA BB CC
a d c -> error
----- ----- -----
procedure tbl_ref2
a b c -> AA BB CC
a d c -> error
----- ----- -----
procedure tbl_ref3
a b c -> AA BB CC
a d c -> error
----- ----- -----
-----$ PROC01 ( lines:12 words:51 ) ------------------------<cut here
風つかい(hshinoh@...)
IconのWWWは、 http://www.cs.arizona.edu/icon/
UniconのWWWは、http://unicon.sourceforge.net/index.html
BGM: for Masqurade / 山見慶子