essen_ex01_0001
の編集
https://khfdpl.osask.jp:443/wiki/?essen_ex01_0001
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
2016_10
2016_11
2016_12
BracketName
Essen
Essen0
Essen1
Essen2
Essen3
Essen4
EssenMemo0001
EssenMemo0002
EssenMemo0003
EssenMemo0004
EssenMemo0005
EssenMemo0006
EssenMemo0007
EssenMemo0008
EssenMemo0009
EssenMemo0010
EssenMemo0011
EssenR2
EssenR2_ess03f
EssenR2_ess03h
EssenR2_ess03i
EssenR2_ideas
EssenR2_jit00
EssenR2_jit01
FormattingRules
FrontPage
Help
IP
InterWiki
InterWikiName
InterWikiSandBox
K
KHPC
KHPC_v000doc01
KHPC_v001doc01
KHPC_v002doc01
KHPC_v003doc01
MenuBar
OSC
OSC20181027
OSC20190222
OSC20191123
OSC20230401
OSC20230528
OSC20231021
OSC20240310
OSC20241026
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
SltVA
VariableArray
WikiEngines
WikiName
YukiWiki
advcal20161205
advcal20161206
advcal20161209
advcal20161210
advcal20161215
eoml0001
eoml0002
essen_ex01_0001
impressions
kcl_malloc
khfdpl_result1
members
memo0001
memo0002
note0001
note0002
note0003
note0004
note0005
note0006
oldworks
oldworks00
oldworks06
oldworks12
oldworks13
osaskjp_index
persistent_C
populars
pr20161105
pr20161105b
scsc
seccamp2017
spam_test
uxf
uxf_01
uxf_02
uxp
* Essenのサンプルコード-01-0001 -(by [[K]], 2016.10.13) ** 註 -Essenは現在開発途上で、以下のプログラムはまだ現バージョンの処理系では動きません。 -「理想としてこういう記述ができる言語を目指している」ということだとお考えください。 ** (1) 2から1万までの範囲で素数の個数を数える -[pure-Essen版: 2016.10.14] 0001: c = 0 0002: init(a, 0) 0003: for (i, 2, 10001) { // 変数名, 初期値, 修了値 0004: if (a[i] == 1) { continue } 0005: c++; 0006: for (j, i * 2, 10001, i) { // 変数名, 初期値, 修了値, 増分 0007: a[j] = 1 0008: } 0009: } 0010: print(c) --[解説] --Essenではmain関数の宣言やincludeを書かずとも簡単なことはできる。 --Essenでは変数の宣言はいらない。2行目にはinit()なるものがあって、なにやら宣言しているようにも見えるかもしれないが、これは for (i, 2, 10001) {a[i] = 0} の代用である。 --Essenでは基本的にセミコロンはいらない。あってもいいがなくてもいい。ただし例外として5行目にはセミコロンを付けた。これは次のforに対する++なのかcに対する++なのかが混乱するかもしれないと心配したからである。 --Essenではifやforの中身が1文しかなくても、中カッコを省略はできない。 --このサンプルでは、新出ローカル変数に対して#を省略してもエラーにならないモードを前提にしている(簡便のため)。 --[補足1] initは中身に何も格納されていない配列(もしくは構造体)を作る。そして未定義の場合は何を返せばいいかというデフォルト値を設定する。 -[インラインC版: 2016.10.14] 0001: f = inline.gcc {{ 0002: void entry(int *p) 0003: { 0004: static char a[10001]; // Essenでは大きなスタック変数は取れない 0005: int i, j, c = 0; 0006: for (i = 2; i <= 10000; i++) 0007: a[i] = 0; 0008: for (i = 2; i <= 10000; i++) { 0009: if (a[i] != 0) continue; 0010: c++; 0011: for (j = i * 2; j <= 10000; j += i) 0012: a[j] = 1; 0013: } 0014: *p = c; 0015: } 0016: }} 0017: c = zerobyte(4) 0018: f(c) 0019: print(getBl32(c, "c").c) --[解説] --1行目から16行目は関数宣言である。だから一度実行すれば何度も実行しなくてもよいものではある。 --このサンプルでは、新出ローカル変数に対して#を省略してもエラーにならないモードを前提にしている(簡便のため)。 --getBl32という関数は、第一引数にバイト列を取り、第二引数にフォーマット文字列を取る。上記の例だと「32bitの整数にcという名前を付ける」という意味になる。ということで、構造体が作られてメンバ名cに値が入る。 * こめんと欄 #comment
タイムスタンプを変更しない
* Essenのサンプルコード-01-0001 -(by [[K]], 2016.10.13) ** 註 -Essenは現在開発途上で、以下のプログラムはまだ現バージョンの処理系では動きません。 -「理想としてこういう記述ができる言語を目指している」ということだとお考えください。 ** (1) 2から1万までの範囲で素数の個数を数える -[pure-Essen版: 2016.10.14] 0001: c = 0 0002: init(a, 0) 0003: for (i, 2, 10001) { // 変数名, 初期値, 修了値 0004: if (a[i] == 1) { continue } 0005: c++; 0006: for (j, i * 2, 10001, i) { // 変数名, 初期値, 修了値, 増分 0007: a[j] = 1 0008: } 0009: } 0010: print(c) --[解説] --Essenではmain関数の宣言やincludeを書かずとも簡単なことはできる。 --Essenでは変数の宣言はいらない。2行目にはinit()なるものがあって、なにやら宣言しているようにも見えるかもしれないが、これは for (i, 2, 10001) {a[i] = 0} の代用である。 --Essenでは基本的にセミコロンはいらない。あってもいいがなくてもいい。ただし例外として5行目にはセミコロンを付けた。これは次のforに対する++なのかcに対する++なのかが混乱するかもしれないと心配したからである。 --Essenではifやforの中身が1文しかなくても、中カッコを省略はできない。 --このサンプルでは、新出ローカル変数に対して#を省略してもエラーにならないモードを前提にしている(簡便のため)。 --[補足1] initは中身に何も格納されていない配列(もしくは構造体)を作る。そして未定義の場合は何を返せばいいかというデフォルト値を設定する。 -[インラインC版: 2016.10.14] 0001: f = inline.gcc {{ 0002: void entry(int *p) 0003: { 0004: static char a[10001]; // Essenでは大きなスタック変数は取れない 0005: int i, j, c = 0; 0006: for (i = 2; i <= 10000; i++) 0007: a[i] = 0; 0008: for (i = 2; i <= 10000; i++) { 0009: if (a[i] != 0) continue; 0010: c++; 0011: for (j = i * 2; j <= 10000; j += i) 0012: a[j] = 1; 0013: } 0014: *p = c; 0015: } 0016: }} 0017: c = zerobyte(4) 0018: f(c) 0019: print(getBl32(c, "c").c) --[解説] --1行目から16行目は関数宣言である。だから一度実行すれば何度も実行しなくてもよいものではある。 --このサンプルでは、新出ローカル変数に対して#を省略してもエラーにならないモードを前提にしている(簡便のため)。 --getBl32という関数は、第一引数にバイト列を取り、第二引数にフォーマット文字列を取る。上記の例だと「32bitの整数にcという名前を付ける」という意味になる。ということで、構造体が作られてメンバ名cに値が入る。 * こめんと欄 #comment
テキスト整形のルールを表示する