EssenMemo0001
の編集
https://khfdpl.osask.jp:443/wiki/?EssenMemo0001
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
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の開発メモ#0001 -(by [[K]], 2017.04.19) ** こういうのがやりたい#1 -''[問題提起]'' -「フィボナッチ数列を10個表示してください」という課題は、C言語で回答するとこんな感じになるだろう。 void fibo() { int a[10], i; a[0] = 0; a[1] = 1; for (i = 2; i < 10; i++) a[i] = a[i - 2] + a[i - 1]; for (i = 0; i < 10; i++) printf("%d ", a[i]); } 0 1 1 2 3 5 8 13 21 34 -私はこれが気に入らない。だってこのプログラムは出力結果の活用がしにくいことこの上ない。たしかにこれでも表示はできる。OSのリダイレクト機能を使えばテキストファイルにもできる。・・・でも、これらの数の総和を出したいと思っても、簡単にはできない。 -じゃあこうしたらどうか? void fibo(int *a, int n) { int i; a[0] = 0; a[1] = 1; for (i = 2; i < n; i++) a[i] = a[i - 2] + a[i - 1]; } -これはいい。結果が変数に入っているから。 -しかし今度はこれを簡単に表示する手段がない。 -つまり、きれいに出力すれば結果を活用しにくくなるし、かといって活用しやすい形式で出力すれば、今度は結果がぜんぜん見えなくなる。 ~ -''[案]'' -標準のprintを強化すればいい。配列を普通に関数の返値にできて、その上で簡単に配列や構造体を表示できればいい。 -まず、Essenでは任意の配列を表示しようとしたときは、それを行に展開する。 >print(a) 0:0, 1:1, 2:1, 3:2, 4:3, 5:5, 6:8, 7:13, 8:21, 9:34, -この表示が気に入らなければ、インデックス非表示を指示する。 >printf((0:(index:0)), a) // 展開深さ0では、index=0 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, -改行を阻止したければ、配列の配列にしてしまう。 >printf((1:(index:0)), (a)) 0:(0, 1, 1, 2, 3, 5, 8, 13, 21, 34), -完全に望む表示ではないかもしれないけど、それなりに近づけることはできた。 -もっとがんばればもっとできるかもしれない。 >printf((0:(index:0), 1:(index:0 separator:" ")), (a)) (0 1 1 2 3 5 8 13 21 34), -っていうか、配列の添え字が整数で0から始まっていて1ずつ増えるのなら、index=0をデフォルトにしてもいいかもしれない。 --もしそうならこうなる。 >printf((1:(separator:" ")), (a)) (0 1 1 2 3 5 8 13 21 34), -なんにせよ、printfでどこまでやるかはそんなに難しく考えなくていいと思う。徹底的に細かくやりたければ、自前でforループをまわして好きなように表示すればいいだけのことなんだから。 -要点は、標準のprintだけでもそれなりには表示できること。それが達成されていれば、ユーザはがんばって表示しようとはしなくなる。そうなれば表示ではなく結果を返すように仕向けやすい。 -あ、こうすればいいんじゃないか? >printf((0:(separator:" ")), a) 0 1 1 2 3 5 8 13 21 34 ** こういうのがやりたい#2 -しかし上記を見ていると、カッコがやたらと多い。私はそれは好みではない。どうにかしてカッコを減らしたい。カッコが多いとそれだけでややこしそうに見える。 -今のところEssenでは、小カッコと角カッコを区別しないので、 >printf([[separator:" "]], a) -のように書くことはできる。しかしなあ、それでもややこしい感じがするのは否めない。 -どうしたらいいのかなー。 -簡単に構造体・配列が作れるからって、それを多用するのがいけなかったのか。 -それともカッコ以外で構造体・配列が作れるようになるべきなのか。 -うーむー、まだ名案がない・・・。 -printfの引数の範囲を明示しなくてもいいことにするか?(セミコロンまで) >printf [[separator:" "]], a; -こういう書き方を許すと、引数の範囲を明示したいときに >(printf [[separator:" "]], a) -とかやるようになって、さらにLispっぽい書き方が選べるようになる(笑)。 * こめんと欄 #comment
タイムスタンプを変更しない
* Essenの開発メモ#0001 -(by [[K]], 2017.04.19) ** こういうのがやりたい#1 -''[問題提起]'' -「フィボナッチ数列を10個表示してください」という課題は、C言語で回答するとこんな感じになるだろう。 void fibo() { int a[10], i; a[0] = 0; a[1] = 1; for (i = 2; i < 10; i++) a[i] = a[i - 2] + a[i - 1]; for (i = 0; i < 10; i++) printf("%d ", a[i]); } 0 1 1 2 3 5 8 13 21 34 -私はこれが気に入らない。だってこのプログラムは出力結果の活用がしにくいことこの上ない。たしかにこれでも表示はできる。OSのリダイレクト機能を使えばテキストファイルにもできる。・・・でも、これらの数の総和を出したいと思っても、簡単にはできない。 -じゃあこうしたらどうか? void fibo(int *a, int n) { int i; a[0] = 0; a[1] = 1; for (i = 2; i < n; i++) a[i] = a[i - 2] + a[i - 1]; } -これはいい。結果が変数に入っているから。 -しかし今度はこれを簡単に表示する手段がない。 -つまり、きれいに出力すれば結果を活用しにくくなるし、かといって活用しやすい形式で出力すれば、今度は結果がぜんぜん見えなくなる。 ~ -''[案]'' -標準のprintを強化すればいい。配列を普通に関数の返値にできて、その上で簡単に配列や構造体を表示できればいい。 -まず、Essenでは任意の配列を表示しようとしたときは、それを行に展開する。 >print(a) 0:0, 1:1, 2:1, 3:2, 4:3, 5:5, 6:8, 7:13, 8:21, 9:34, -この表示が気に入らなければ、インデックス非表示を指示する。 >printf((0:(index:0)), a) // 展開深さ0では、index=0 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, -改行を阻止したければ、配列の配列にしてしまう。 >printf((1:(index:0)), (a)) 0:(0, 1, 1, 2, 3, 5, 8, 13, 21, 34), -完全に望む表示ではないかもしれないけど、それなりに近づけることはできた。 -もっとがんばればもっとできるかもしれない。 >printf((0:(index:0), 1:(index:0 separator:" ")), (a)) (0 1 1 2 3 5 8 13 21 34), -っていうか、配列の添え字が整数で0から始まっていて1ずつ増えるのなら、index=0をデフォルトにしてもいいかもしれない。 --もしそうならこうなる。 >printf((1:(separator:" ")), (a)) (0 1 1 2 3 5 8 13 21 34), -なんにせよ、printfでどこまでやるかはそんなに難しく考えなくていいと思う。徹底的に細かくやりたければ、自前でforループをまわして好きなように表示すればいいだけのことなんだから。 -要点は、標準のprintだけでもそれなりには表示できること。それが達成されていれば、ユーザはがんばって表示しようとはしなくなる。そうなれば表示ではなく結果を返すように仕向けやすい。 -あ、こうすればいいんじゃないか? >printf((0:(separator:" ")), a) 0 1 1 2 3 5 8 13 21 34 ** こういうのがやりたい#2 -しかし上記を見ていると、カッコがやたらと多い。私はそれは好みではない。どうにかしてカッコを減らしたい。カッコが多いとそれだけでややこしそうに見える。 -今のところEssenでは、小カッコと角カッコを区別しないので、 >printf([[separator:" "]], a) -のように書くことはできる。しかしなあ、それでもややこしい感じがするのは否めない。 -どうしたらいいのかなー。 -簡単に構造体・配列が作れるからって、それを多用するのがいけなかったのか。 -それともカッコ以外で構造体・配列が作れるようになるべきなのか。 -うーむー、まだ名案がない・・・。 -printfの引数の範囲を明示しなくてもいいことにするか?(セミコロンまで) >printf [[separator:" "]], a; -こういう書き方を許すと、引数の範囲を明示したいときに >(printf [[separator:" "]], a) -とかやるようになって、さらにLispっぽい書き方が選べるようになる(笑)。 * こめんと欄 #comment
テキスト整形のルールを表示する