EssenMemo0009
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 実現したい機能のために仕様を考える#1
-(by [[K]], 2017.06.14)
** 引数の渡し方
-[1]
-C言語では、変数aと変数bを交換する関数を書くとしたら、呼...
-私はこれはかっこよくないと常々感じている。この&を書かず...
-ちなみにC++なら参照型とかを使ってこれを解決できる。
-Essenでは関数側の要求に合わせて引数リストを解釈するので...
-となるとC++方式は採用できない。
-要するにとにかく (a b) と書いたときに、aやbの値を参照し...
-どんな方法にすべきかは後で考えるとして、とにかくこれだけ...
-[2]
-どうすればいいか。それはここにはひとまず a と書いてあり...
-そうすると (a b) は内部的にはこうなる。 (@a @b)
-それで print (a b) とすると、まず内部で (@a @b) が生成さ...
-なるほどこれはいけるかもしれない。
-この方法だと、 (@a @b) を生成した後でも、評価する前にaや...
-これは面白いが危険だ。
a = 1 b = 2
x = (a b)
a = b = 0
printt x
-これで表示されるのは (0 0) でしたっていうのは明らかに直...
-どうすれば両立できるか。
-代入演算子の意味を見直そう。
-通常の代入では、 @a や @b みたいな情報を検出したら、それ...
-これでこの問題はひとまず解決する。
-[3]
-なお、変数が単独で現れずに、式の形で現れた場合は、参照情...
-この場合は即座に (1 2) になる。
-この何もしないっていう演算は役に立つかもしれない。 ~~ っ...
-[4]
- ::= 演算子を使えば、遅延評価みたいな仕組みも実現できそ...
-[5]
-この仕様の場合、 (a b) にはaやbを書き換えるための情報を...
(a b c) :::= (3 4 5)
-つまりこれでa、b、cを書き換えられる。
-これはこれで便利そう。
** 配列の要素へのアクセス方法
-[1]
-いきなりだけど具体例
> a = (1 2 3 "kawai" "Essen" 4 5 6)
> print a[3] // C言語っぽい書き方、デフォルトでは0オリジン
kawai
> print a(5) // Essenでは小カッコでも配列にアクセスできる
4
> b = (yama:"kawa" tsu:"ka")
> print b["yama"]
kawa
> print b.tsu
ka
> print b:[0] // こうするとkeyをソートした先頭の値が取れ...
ka
> print b:::[0] // こうすると値ではなくてキーが取れる
tsu
> c = () // 空っぽの配列
> c:[0] = 123
> c:[1] = 456
> c:[0] = 789 // 123 と 456 は後ろにずれる
> print c
(789 123 456)
> d = [(a:123 b:"xyz") (a:456 b:"uvw") (a:789 b:"rst")]
> print searchObject(d, "a", 0) // aが最小値をとるオブジ...
(a:123 b:"xyz")
> print serachIndex(d, "b", 0)
2
-[2]
-配列に値をセットする方法A
--(1) a.index = ...
--(2) a["index"] = ...
--(3) a("index") = ...
--(4) a = (...)
--(5) a:[0] = ...
-いずれでもOK。indexは数字でもいいが、その場合は(1)の形式...
-[3]
-配列に値をセットする方法B
--(1) VirtualIndextInsert(a, 1, ...)
--(2) a = VirtualIndexArray (...)
-この方法でセットする場合は、順序が思いのままになるが、代...
-方法Aと方法Bを混在させることはできない。つまり一つの配列...
* こめんと欄
#comment
終了行:
* 実現したい機能のために仕様を考える#1
-(by [[K]], 2017.06.14)
** 引数の渡し方
-[1]
-C言語では、変数aと変数bを交換する関数を書くとしたら、呼...
-私はこれはかっこよくないと常々感じている。この&を書かず...
-ちなみにC++なら参照型とかを使ってこれを解決できる。
-Essenでは関数側の要求に合わせて引数リストを解釈するので...
-となるとC++方式は採用できない。
-要するにとにかく (a b) と書いたときに、aやbの値を参照し...
-どんな方法にすべきかは後で考えるとして、とにかくこれだけ...
-[2]
-どうすればいいか。それはここにはひとまず a と書いてあり...
-そうすると (a b) は内部的にはこうなる。 (@a @b)
-それで print (a b) とすると、まず内部で (@a @b) が生成さ...
-なるほどこれはいけるかもしれない。
-この方法だと、 (@a @b) を生成した後でも、評価する前にaや...
-これは面白いが危険だ。
a = 1 b = 2
x = (a b)
a = b = 0
printt x
-これで表示されるのは (0 0) でしたっていうのは明らかに直...
-どうすれば両立できるか。
-代入演算子の意味を見直そう。
-通常の代入では、 @a や @b みたいな情報を検出したら、それ...
-これでこの問題はひとまず解決する。
-[3]
-なお、変数が単独で現れずに、式の形で現れた場合は、参照情...
-この場合は即座に (1 2) になる。
-この何もしないっていう演算は役に立つかもしれない。 ~~ っ...
-[4]
- ::= 演算子を使えば、遅延評価みたいな仕組みも実現できそ...
-[5]
-この仕様の場合、 (a b) にはaやbを書き換えるための情報を...
(a b c) :::= (3 4 5)
-つまりこれでa、b、cを書き換えられる。
-これはこれで便利そう。
** 配列の要素へのアクセス方法
-[1]
-いきなりだけど具体例
> a = (1 2 3 "kawai" "Essen" 4 5 6)
> print a[3] // C言語っぽい書き方、デフォルトでは0オリジン
kawai
> print a(5) // Essenでは小カッコでも配列にアクセスできる
4
> b = (yama:"kawa" tsu:"ka")
> print b["yama"]
kawa
> print b.tsu
ka
> print b:[0] // こうするとkeyをソートした先頭の値が取れ...
ka
> print b:::[0] // こうすると値ではなくてキーが取れる
tsu
> c = () // 空っぽの配列
> c:[0] = 123
> c:[1] = 456
> c:[0] = 789 // 123 と 456 は後ろにずれる
> print c
(789 123 456)
> d = [(a:123 b:"xyz") (a:456 b:"uvw") (a:789 b:"rst")]
> print searchObject(d, "a", 0) // aが最小値をとるオブジ...
(a:123 b:"xyz")
> print serachIndex(d, "b", 0)
2
-[2]
-配列に値をセットする方法A
--(1) a.index = ...
--(2) a["index"] = ...
--(3) a("index") = ...
--(4) a = (...)
--(5) a:[0] = ...
-いずれでもOK。indexは数字でもいいが、その場合は(1)の形式...
-[3]
-配列に値をセットする方法B
--(1) VirtualIndextInsert(a, 1, ...)
--(2) a = VirtualIndexArray (...)
-この方法でセットする場合は、順序が思いのままになるが、代...
-方法Aと方法Bを混在させることはできない。つまり一つの配列...
* こめんと欄
#comment
ページ名: