OSDN Git Service

ba6b2ac896ada145a20d57f774ed945ae89ec0a0
[ring-lang-081/ring.git] / docs / build / html / natural.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>自然言語プログラミング &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
10     
11     <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    './',
17         VERSION:     '1.12',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="_static/jquery.js"></script>
24     <script type="text/javascript" src="_static/underscore.js"></script>
25     <script type="text/javascript" src="_static/doctools.js"></script>
26     <script type="text/javascript" src="_static/translations.js"></script>
27     <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28     <link rel="next" title="自然言語ライブラリの用法" href="naturallibrary.html" />
29     <link rel="prev" title="入れ子構造の宣言型プログラミング" href="declarative.html" />
30     <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
31
32   </head>
33   <body role="document">
34 <div class="topbar">
35   <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
36   <ul>
37     
38     <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39     <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40     <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41     <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42     <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43     <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
44     
45     <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46     <li><a title="総合索引" href="genindex.html">Index</a></li>
47     <li>
48       
49       
50 <form action="search.html" method="get">
51   <input type="text" name="q" placeholder="Search" />
52   <input type="hidden" name="check_keywords" value="yes" />
53   <input type="hidden" name="area" value="default" />
54 </form>
55       
56     </li>
57   </ul>
58 </div>
59
60 <div class="related">
61     <h3>ナビゲーション</h3>
62     <ul>
63       <li class="right">
64         <a href="naturallibrary.html" title="自然言語ライブラリの用法">
65           next &raquo;
66         </a>
67       </li>
68       <li class="right">
69         <a href="declarative.html" title="入れ子構造の宣言型プログラミング">
70           &laquo; previous
71         </a>
72          |
73       </li>
74       <li>
75         <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
76          &raquo;
77       </li>
78       
79       <li>自然言語プログラミング</li> 
80     </ul>
81 </div>
82   
83
84     <div class="document">
85       <div class="documentwrapper">
86         <div class="bodywrapper">
87           <div class="body" role="main">
88             
89   <div class="section" id="index-0">
90 <span id="id1"></span><h1>自然言語プログラミング<a class="headerlink" href="#index-0" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>プログラミング言語 Ring でクラスとオブジェクトを土台にした自然プログラミング言語を作成できます。</p>
92 <div class="section" id="index-1">
93 <span id="id2"></span><h2>沿革<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
94 <p>2010年にプログラミング言語 Supernova の新規開発で Programming Without Coding Technology (PWCT) を使用しました。
95 Supernova は自然言語ステートメントと類似の記法によるコードで GUI アプリケーションを簡単に作成できます。
96 五年後、いまでは同様の成果を Ring で得ることができます。さらに好みや必要に応じて、
97 どのような問題領域であっても自然言語ステートメントに類似したコードの作成、使用する能力があります。</p>
98 <p>Ring は Supernova の精神を受け継いでおり、そのほかにも多種様々な汎用プログラミング言語の精神を受け継いでいます。</p>
99 </div>
100 <div class="section" id="index-2">
101 <span id="id3"></span><h2>用例<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
102 <p>この用例は、二つの命令を定義するクラスの作成方法です。</p>
103 <p>最初の命令は : I want window</p>
104 <p>次の命令は : Window title = &lt;式&gt;</p>
105 <p>また ‘the’ などのキーワードは無視します。</p>
106 <div class="highlight-ring"><div class="highlight"><pre><span class="k">New</span> <span class="n">App</span>
107 <span class="p">{</span>
108         <span class="n">I</span> <span class="n">want</span> <span class="n">window</span>
109         <span class="n">The</span> <span class="n">window</span> <span class="n">title</span> <span class="o">=</span> <span class="s">&quot;hello world&quot;</span>
110 <span class="p">}</span>
111
112 <span class="k">Class</span> <span class="n">App</span>
113
114         <span class="c"># I want window 命令の属性</span>
115                 <span class="n">i</span> <span class="n">want</span> <span class="n">window</span>
116                 <span class="n">nIwantwindow</span> <span class="o">=</span> <span class="mi">0</span>
117         <span class="c"># Window title 命令の属性</span>
118         <span class="c"># ここで window 属性の再定義を行いません。</span>
119                 <span class="n">title</span>
120                 <span class="n">nWindowTitle</span> <span class="o">=</span> <span class="mi">0</span>
121         <span class="c"># 値を与えると、キーワードを無視します。</span>
122                 <span class="n">the</span><span class="o">=</span><span class="mi">0</span>
123
124         <span class="k">func</span> <span class="n">geti</span>
125                 <span class="k">if</span> <span class="n">nIwantwindow</span> <span class="o">=</span> <span class="mi">0</span>
126                         <span class="n">nIwantwindow</span><span class="o">++</span>
127                 <span class="k">ok</span>
128
129         <span class="k">func</span> <span class="n">getwant</span>
130                 <span class="k">if</span> <span class="n">nIwantwindow</span> <span class="o">=</span> <span class="mi">1</span>
131                         <span class="n">nIwantwindow</span><span class="o">++</span>
132                 <span class="k">ok</span>
133
134         <span class="k">func</span> <span class="n">getwindow</span>
135                 <span class="k">if</span> <span class="n">nIwantwindow</span> <span class="o">=</span> <span class="mi">2</span>
136                         <span class="n">nIwantwindow</span><span class="o">=</span> <span class="mi">0</span>
137                         <span class="k">see</span> <span class="s">&quot;Instruction : I want window&quot;</span> <span class="o">+</span> <span class="n">nl</span>
138                 <span class="k">ok</span>
139                 <span class="k">if</span> <span class="n">nWindowTitle</span> <span class="o">=</span> <span class="mi">0</span>
140                         <span class="n">nWindowTitle</span><span class="o">++</span>
141                 <span class="k">ok</span>
142
143         <span class="k">func</span> <span class="n">settitle</span> <span class="n">cValue</span>
144                 <span class="k">if</span> <span class="n">nWindowTitle</span> <span class="o">=</span> <span class="mi">1</span>
145                         <span class="n">nWindowTitle</span><span class="o">=</span><span class="mi">0</span>
146                         <span class="k">see</span> <span class="s">&quot;Instruction : Window Title = &quot;</span> <span class="o">+</span> <span class="n">cValue</span> <span class="o">+</span> <span class="n">nl</span>
147                 <span class="k">ok</span>
148 </pre></div>
149 </div>
150 <p>実行結果:</p>
151 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Instruction</span> <span class="p">:</span> <span class="n">I</span> <span class="n">want</span> <span class="n">window</span>
152 <span class="n">Instruction</span> <span class="p">:</span> <span class="n">Window</span> <span class="n">Title</span> <span class="o">=</span> <span class="n">hello</span> <span class="n">world</span>
153 </pre></div>
154 </div>
155 </div>
156 <div class="section" id="and">
157 <span id="index-3"></span><h2>キーワード‘And’の変更<a class="headerlink" href="#and" title="このヘッドラインへのパーマリンク">¶</a></h2>
158 <p>‘and’で二つの命令同士をつなげたい場合があります。</p>
159 <p>‘and’ は Ring のキーワードであるため、問題がありますが、</p>
160 <p>ChangeRingKeyword 命令により変更できます。</p>
161 <p>文法:</p>
162 <div class="highlight-ring"><div class="highlight"><pre><span class="k">ChangeRingKeyword</span>  <span class="o">&lt;</span><span class="n">変更元のキーワード</span><span class="o">&gt;</span>  <span class="o">&lt;</span><span class="n">変更先のキーワード</span><span class="o">&gt;</span>
163 </pre></div>
164 </div>
165 <div class="admonition note">
166 <p class="first admonition-title">注釈</p>
167 <p class="last">キーワードの復元をお忘れなく。</p>
168 </div>
169 <div class="admonition tip">
170 <p class="first admonition-title">ちなみに</p>
171 <p class="last">ChangeRingKeyword 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。</p>
172 </div>
173 <p>用例:</p>
174 <div class="highlight-ring"><div class="highlight"><pre>ChangeRingKeyword       and  _and
175
176 New App
177 {
178                 I want window and the window title = &quot;hello world&quot;
179 }
180
181 Class App
182
183                 # I want window 命令の属性
184                                 i want window
185                                 nIwantwindow = 0
186                 # Window title 命令の属性
187                 # ここで window 属性の再定義を行いません。
188                                 title
189                                 nWindowTitle = 0
190                 # 値を与えると、キーワードは無視されます。
191                                 the=0  and=0
192
193 ChangeRingKeyword       _and  and
194
195                 func geti
196                         if nIwantwindow = 0
197                                 nIwantwindow++
198                         ok
199
200                 func getwant
201                         if nIwantwindow = 1
202                                 nIwantwindow++
203                         ok
204
205                 func getwindow
206                         if nIwantwindow = 2
207                                 nIwantwindow= 0
208                                 see &quot;Instruction : I want window&quot; + nl
209                         ok
210                         if nWindowTitle = 0
211                                 nWindowTitle++
212                         ok
213
214                 func settitle cValue
215                         if nWindowTitle = 1
216                                 nWindowTitle=0
217                                 see &quot;Instruction : Window Title = &quot; + cValue + nl
218                         ok
219
220                 func getand
221                         see &quot;Using : and&quot; + nl
222 </pre></div>
223 </div>
224 <p>実行結果:</p>
225 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Instruction</span> <span class="p">:</span> <span class="n">I</span> <span class="n">want</span> <span class="n">window</span>
226 <span class="n">Using</span> <span class="p">:</span> <span class="ow">and</span>
227 <span class="n">Instruction</span> <span class="p">:</span> <span class="n">Window</span> <span class="n">Title</span> <span class="o">=</span> <span class="n">hello</span> <span class="n">world</span>
228 </pre></div>
229 </div>
230 </div>
231 <div class="section" id="index-4">
232 <span id="id4"></span><h2>演算子 ‘+’ の変更<a class="headerlink" href="#index-4" title="このヘッドラインへのパーマリンク">¶</a></h2>
233 <p>“+”演算子などの演算子へ新しい動作を定義したいときがあります。</p>
234 <p>この変更は、 ChangeRingOperator 命令を使用することにより、演算子を隠せます (名前自体の変更)。</p>
235 <p>そして、演算子を識別子としたものを動作として扱うことができます。</p>
236 <p>文法:</p>
237 <div class="highlight-ring"><div class="highlight"><pre><span class="k">ChangeRingOperator</span>  <span class="o">&lt;</span><span class="n">変更前の演算子</span><span class="o">&gt;</span>  <span class="o">&lt;</span><span class="n">変更後の演算子</span><span class="o">&gt;</span>
238 </pre></div>
239 </div>
240 <div class="admonition note">
241 <p class="first admonition-title">注釈</p>
242 <p class="last">キーワードの復元をお忘れなく。</p>
243 </div>
244 <div class="admonition tip">
245 <p class="first admonition-title">ちなみに</p>
246 <p class="last">ChangeRingOperator 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。</p>
247 </div>
248 <p>用例:</p>
249 <div class="highlight-ring"><div class="highlight"><pre>ChangeRingOperator + _+
250
251 New App {
252         +
253 }
254
255 Class App
256         +
257         func get+
258                 see &quot;Plus operator&quot;
259
260 ChangeRingOperator _+ +
261 </pre></div>
262 </div>
263 <p>実行結果:</p>
264 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Plus</span> <span class="n">operator</span>
265 </pre></div>
266 </div>
267 </div>
268 <div class="section" id="is">
269 <span id="index-5"></span><h2>‘=’ 演算子を ‘is’ へ変更するには<a class="headerlink" href="#is" title="このヘッドラインへのパーマリンク">¶</a></h2>
270 <p>用例:</p>
271 <div class="highlight-ring"><div class="highlight"><pre>ChangeRingKeyword       and  _and
272 ChangeRingOperator      =    is
273
274 New App
275 {
276                 I want window and the window title is &quot;hello world&quot;
277 }
278
279 ChangeRingOperator      is    =
280
281 Class App
282
283                 # I want window 命令の属性
284                                 i want window
285                                 nIwantwindow = 0
286                 # Window title 命令の属性
287                 # ここで window 属性の再定義を行いません。
288                                 title
289                                 nWindowTitle = 0
290                 # 値を与えると、キーワードは無視されます。
291                                 the=0  and=0
292
293 ChangeRingKeyword       _and  and
294
295                 func geti
296                         if nIwantwindow = 0
297                                 nIwantwindow++
298                         ok
299
300                 func getwant
301                         if nIwantwindow = 1
302                                 nIwantwindow++
303                         ok
304
305                 func getwindow
306                         if nIwantwindow = 2
307                                 nIwantwindow= 0
308                                 see &quot;Instruction : I want window&quot; + nl
309                         ok
310                         if nWindowTitle = 0
311                                 nWindowTitle++
312                         ok
313
314                 func settitle cValue
315                         if nWindowTitle = 1
316                                 nWindowTitle=0
317                                 see &quot;Instruction : Window Title = &quot; + cValue + nl
318                         ok
319 </pre></div>
320 </div>
321 </div>
322 <div class="section" id="eval">
323 <span id="index-6"></span><h2>自然言語コードで Eval() を使うには<a class="headerlink" href="#eval" title="このヘッドラインへのパーマリンク">¶</a></h2>
324 <p>用例:</p>
325 <div class="highlight-ring"><div class="highlight"><pre>func Main
326
327   cProgram = &#39; I want window and the window title is &quot;hello world&quot; &#39;
328
329   MyLanguage(cProgram)
330
331 Func MyLanguage cCode
332
333   # キーワードと演算子を変更する命令をコードへ追加します。
334   # 理由は Eval() はコンパイラの新しいオブジェクトとして使用されるからです (元のキーワードと演算子)。
335
336   cCode = &#39;
337         ChangeRingKeyword  and  _and
338         ChangeRingOperator  =    is
339   &#39; + cCode
340
341   New App
342   {
343           eval(cCode)
344   }
345
346
347   Class App
348
349           # I want window 命令の属性
350                   i want window
351                   nIwantwindow = 0
352           # Window title 命令の属性
353           # ここで window 属性の再定義を行いません。
354                   title
355                   nWindowTitle = 0
356           # 値を与えると、キーワードは無視されます。
357                   the=0
358
359           ChangeRingKeyword  and  _and
360                   and=0
361           ChangeRingKeyword  _and  and
362
363           func geti
364                 if nIwantwindow = 0
365                   nIwantwindow++
366                 ok
367
368           func getwant
369                 if nIwantwindow = 1
370                   nIwantwindow++
371                 ok
372
373           func getwindow
374                 if nIwantwindow = 2
375                   nIwantwindow= 0
376                   see &quot;Instruction : I want window&quot; + nl
377                 ok
378                 if nWindowTitle = 0
379                   nWindowTitle++
380                 ok
381
382           func settitle cValue
383                 if nWindowTitle = 1
384                   nWindowTitle=0
385                   see &quot;Instruction : Window Title = &quot; + cValue + nl
386                 ok
387 </pre></div>
388 </div>
389 </div>
390 <div class="section" id="bracestart-braceend">
391 <span id="index-7"></span><h2>BraceStart と BraceEnd メソッド<a class="headerlink" href="#bracestart-braceend" title="このヘッドラインへのパーマリンク">¶</a></h2>
392 <p>{ } の使用前後で実行されるコードを記述できます。</p>
393 <p>用例:</p>
394 <div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">test</span> <span class="p">{</span>
395         <span class="k">see</span> <span class="s">&quot;Hello&quot;</span> <span class="o">+</span> <span class="n">nl</span>
396 <span class="p">}</span>
397
398 <span class="n">o1</span> <span class="p">{}</span>
399
400 <span class="k">class</span> <span class="n">test</span>
401
402         <span class="k">func</span> <span class="n">bracestart</span>
403                 <span class="k">see</span> <span class="s">&quot;start&quot;</span> <span class="o">+</span> <span class="n">nl</span>
404
405         <span class="k">func</span> <span class="n">braceend</span>
406                 <span class="k">see</span> <span class="s">&quot;end&quot;</span> <span class="o">+</span> <span class="n">nl</span>
407 </pre></div>
408 </div>
409 <p>実行結果:</p>
410 <div class="highlight-ring"><div class="highlight"><pre><span class="n">start</span>
411 <span class="n">Hello</span>
412 <span class="k">end</span>
413 <span class="n">start</span>
414 <span class="k">end</span>
415 </pre></div>
416 </div>
417 </div>
418 <div class="section" id="braceexpreval">
419 <span id="index-8"></span><h2>BraceExprEval メソッド<a class="headerlink" href="#braceexpreval" title="このヘッドラインへのパーマリンク">¶</a></h2>
420 <p>この用例は、 “BraceExprEval”メソッドで自然言語コードの式を取得するための用法です。</p>
421 <p>用例:</p>
422 <div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">natural</span> <span class="p">{</span>
423         <span class="n">create</span> <span class="mi">5</span>
424 <span class="p">}</span>
425
426 <span class="k">class</span> <span class="n">natural</span>
427         <span class="n">create</span><span class="o">=</span><span class="mi">0</span>
428         <span class="n">lkeyword</span> <span class="o">=</span> <span class="kp">false</span>
429         <span class="k">func</span> <span class="n">braceexpreval</span> <span class="n">r</span>
430                 <span class="k">if</span> <span class="n">lkeyword</span> <span class="n">lkeyword</span><span class="o">=</span><span class="kp">false</span> <span class="k">return</span> <span class="k">ok</span>
431                 <span class="k">see</span> <span class="s">&quot;expr eval&quot;</span> <span class="o">+</span> <span class="n">nl</span>
432                 <span class="k">see</span> <span class="s">&quot;type: &quot;</span> <span class="o">+</span> <span class="n">type</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">see</span> <span class="n">nl</span>
433                 <span class="k">see</span> <span class="s">&quot;value : &quot;</span> <span class="k">see</span> <span class="n">r</span> <span class="k">see</span> <span class="n">nl</span>
434         <span class="k">func</span> <span class="n">getcreate</span>
435                 <span class="n">lkeyword</span> <span class="o">=</span> <span class="kp">true</span>
436                 <span class="k">see</span> <span class="s">&quot;create&quot;</span> <span class="o">+</span> <span class="n">nl</span>
437 </pre></div>
438 </div>
439 <p>実行結果:</p>
440 <div class="highlight-ring"><div class="highlight"><pre><span class="n">create</span>
441 <span class="n">expr</span> <span class="n">eval</span>
442 <span class="n">type</span><span class="p">:</span> <span class="n">NUMBER</span>
443 <span class="n">value</span> <span class="p">:</span> <span class="mi">5</span>
444 </pre></div>
445 </div>
446 </div>
447 <div class="section" id="index-9">
448 <span id="id5"></span><h2>本物の自然言語コード<a class="headerlink" href="#index-9" title="このヘッドラインへのパーマリンク">¶</a></h2>
449 <p>この用例は、より高度です。</p>
450 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># 自然言語コード</span>
451 <span class="k">new</span> <span class="n">program</span> <span class="p">{</span>
452         <span class="n">Accept</span> <span class="mi">2</span> <span class="n">numbers</span> <span class="n">then</span> <span class="n">print</span> <span class="n">the</span> <span class="n">sum</span>
453 <span class="p">}</span>
454
455 <span class="c"># 自然言語コードの実装</span>
456 <span class="k">class</span> <span class="n">program</span>
457         <span class="c"># キーワード</span>
458                 <span class="n">Accept</span><span class="o">=</span><span class="mi">0</span> <span class="n">numbers</span><span class="o">=</span><span class="mi">0</span> <span class="n">then</span><span class="o">=</span><span class="mi">0</span> <span class="n">print</span><span class="o">=</span><span class="mi">0</span> <span class="n">the</span><span class="o">=</span><span class="mi">0</span> <span class="n">sum</span><span class="o">=</span><span class="mi">0</span>
459
460         <span class="c"># 実行</span>
461         <span class="k">func</span> <span class="n">braceexpreval</span> <span class="n">x</span>
462                 <span class="n">value</span> <span class="o">=</span> <span class="n">x</span>
463         <span class="k">func</span> <span class="n">getnumbers</span>
464                 <span class="k">for</span> <span class="n">x</span><span class="o">=</span><span class="mi">1</span> <span class="k">to</span> <span class="n">value</span>
465                         <span class="k">see</span> <span class="s">&quot;Enter Number (&quot;</span><span class="o">+</span><span class="n">x</span><span class="o">+</span><span class="s">&quot;) :&quot;</span> <span class="k">give</span> <span class="n">nNumber</span>
466                         <span class="n">aNumbers</span> <span class="o">+</span> <span class="n">nNumber</span>
467                 <span class="k">next</span>
468         <span class="k">func</span> <span class="n">getsum</span>
469                 <span class="n">nSUm</span> <span class="o">=</span> <span class="mi">0</span>
470                 <span class="k">for</span> <span class="n">x</span> <span class="k">in</span> <span class="n">aNumbers</span> <span class="n">nSum</span><span class="o">+=</span> <span class="n">x</span> <span class="k">next</span>
471                 <span class="k">see</span> <span class="s">&quot;The Sum : &quot;</span> <span class="o">+</span> <span class="n">nSum</span>
472         <span class="n">private</span>
473                 <span class="n">value</span><span class="o">=</span><span class="mi">0</span> <span class="n">aNumbers</span><span class="o">=[]</span>
474 </pre></div>
475 </div>
476 <p>実行結果:</p>
477 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Enter</span> <span class="n">Number</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">:</span><span class="mi">3</span>
478 <span class="n">Enter</span> <span class="n">Number</span> <span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="p">:</span><span class="mi">4</span>
479 <span class="n">The</span> <span class="n">Sum</span> <span class="p">:</span> <span class="mi">7</span>
480 </pre></div>
481 </div>
482 </div>
483 <div class="section" id="braceerror">
484 <span id="index-10"></span><h2>BraceError() メソッド<a class="headerlink" href="#braceerror" title="このヘッドラインへのパーマリンク">¶</a></h2>
485 <p>この用例は、 “BraceError” メソッドで括弧 { } を用いてオブジェクトへアクセスした時の
486 エラー処理の用法です。</p>
487 <p>用例:</p>
488 <div class="highlight-ring"><div class="highlight"><pre><span class="k">func</span> <span class="n">main</span>
489         <span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span>
490                 <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span>
491                 <span class="n">TEST</span>
492                 <span class="k">SEE</span> <span class="n">test</span>
493         <span class="p">}</span>
494
495 <span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
496         <span class="k">func</span> <span class="n">braceerror</span>
497                 <span class="k">see</span> <span class="s">&quot;Handle Error!&quot;</span> <span class="o">+</span> <span class="n">nl</span>
498                 <span class="k">SEE</span> <span class="s">&quot;Message :&quot;</span> <span class="o">+</span> <span class="n">cCatchError</span> <span class="o">+</span> <span class="n">nl</span>
499                 <span class="k">if</span> <span class="p">(</span> <span class="n">left</span><span class="p">(</span><span class="n">cCatchError</span><span class="p">,</span><span class="mi">11</span><span class="p">)</span> <span class="o">=</span> <span class="s">&quot;Error (R24)&quot;</span> <span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">isattribute</span><span class="p">(</span><span class="n">self</span><span class="p">,</span><span class="s">&quot;test&quot;</span><span class="p">)</span>
500                         <span class="k">see</span> <span class="s">&quot;add attribute&quot;</span> <span class="o">+</span> <span class="n">nl</span>
501                         <span class="n">addattribute</span><span class="p">(</span><span class="n">self</span><span class="p">,</span><span class="s">&quot;test&quot;</span><span class="p">)</span>
502                         <span class="n">test</span> <span class="o">=</span> <span class="mi">10</span>
503                 <span class="k">ok</span>
504                 <span class="k">see</span> <span class="s">&quot;done&quot;</span> <span class="o">+</span> <span class="n">nl</span>
505                 <span class="k">return</span>
506 </pre></div>
507 </div>
508 <p>実行結果:</p>
509 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Handle</span> <span class="n">Error</span><span class="o">!</span>
510 <span class="n">Message</span> <span class="p">:</span><span class="n">Error</span> <span class="p">(</span><span class="n">R24</span><span class="p">)</span> <span class="p">:</span> <span class="n">Using</span> <span class="n">uninitialized</span> <span class="n">variable</span> <span class="p">:</span> <span class="n">test</span>
511 <span class="n">add</span> <span class="n">attribute</span>
512 <span class="k">done</span>
513 <span class="mi">10</span>
514 </pre></div>
515 </div>
516 <p>用例:</p>
517 <div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">point</span> <span class="p">{</span>
518         <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span>
519         <span class="n">test</span><span class="p">()</span>
520         <span class="k">see</span> <span class="s">&quot;mmm...&quot;</span> <span class="o">+</span> <span class="n">NL</span>
521 <span class="p">}</span>
522
523 <span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
524         <span class="k">func</span> <span class="n">braceerror</span>
525                 <span class="k">see</span> <span class="s">&quot;Handle Error!&quot;</span> <span class="o">+</span> <span class="n">nl</span>
526                 <span class="k">see</span> <span class="s">&quot;Message :&quot;</span> <span class="o">+</span> <span class="n">cCatchError</span> <span class="o">+</span> <span class="n">nl</span>
527                 <span class="k">see</span> <span class="n">self</span>
528                 <span class="k">see</span> <span class="s">&quot;Done&quot;</span> <span class="o">+</span> <span class="n">NL</span>
529 </pre></div>
530 </div>
531 <p>実行結果:</p>
532 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Handle</span> <span class="n">Error</span><span class="o">!</span>
533 <span class="n">Message</span> <span class="p">:</span><span class="n">Error</span> <span class="p">(</span><span class="n">R3</span><span class="p">)</span> <span class="p">:</span> <span class="n">Calling</span> <span class="n">Function</span> <span class="n">without</span> <span class="n">definition</span> <span class="o">!</span><span class="p">:</span> <span class="n">test</span>
534 <span class="n">x</span><span class="p">:</span> <span class="mf">10.000000</span>
535 <span class="n">y</span><span class="p">:</span> <span class="mf">20.000000</span>
536 <span class="n">z</span><span class="p">:</span> <span class="mf">30.000000</span>
537 <span class="k">Done</span>
538 <span class="n">mmm</span><span class="p">...</span>
539 </pre></div>
540 </div>
541 </div>
542 <div class="section" id="index-11">
543 <span id="id6"></span><h2>美しい自然言語コード<a class="headerlink" href="#index-11" title="このヘッドラインへのパーマリンク">¶</a></h2>
544 <p>“literal”としてリテラルを入力する代わりに直接単語を受け入れることができます。</p>
545 <p>用例:</p>
546 <p>この用例では、“hello world”の代わりに hello world を受け入れます。</p>
547 <p>この用例では、命令の終了を確認するために braceend() を使用しています。</p>
548 <p>このクラスではリテラルで終了する自然言語命令のみ処理します。</p>
549 <div class="highlight-ring"><div class="highlight"><pre>ChangeRingKeyword       and  _and
550
551 New App
552 {
553                 I want window and the window title is hello world
554 }
555
556 Class App
557
558                 # I want window 命令の属性
559                                 i want window
560                                 nIwantwindow = 0
561                 # Window title 命令の属性
562                 # ここで window 属性の再定義を行いません。
563                                 title is
564                                 nWindowTitle = 0
565                 # 値を与えると、キーワードは無視されます。
566                                 the=0  and=0
567                 # データ
568                                 literal = &quot;&quot;
569
570 ChangeRingKeyword       _and  and
571
572                 func geti
573                         if nIwantwindow = 0
574                                 nIwantwindow++
575                         ok
576
577                 func getwant
578                         if nIwantwindow = 1
579                                 nIwantwindow++
580                         ok
581
582                 func getwindow
583                         if nIwantwindow = 2
584                                 nIwantwindow= 0
585                                 see &quot;Instruction : I want window&quot; + nl
586                         ok
587                         if nWindowTitle = 0
588                                 nWindowTitle++
589                         ok
590
591                 func gettitle
592                         if nWindowTitle = 1
593                                 nWindowTitle=2
594                         ok
595
596                 func getis
597                         if nWindowTitle = 2
598                                 nWindowTitle=3
599                         ok
600
601                 func braceend
602                         if nWindowTitle = 3
603                                 see &quot;Instruction : Window Title = &quot; + literal + nl
604                                 nWindowTitle = 0
605                         ok
606
607                 func braceerror
608                         c= substr(cCatchError,&quot;:&quot;)
609                         while c &gt; 0
610                                 c= substr(cCatchError,&quot;:&quot;)
611                                 cCatchError=substr(cCatchError,c+1)
612                         end
613                         literal += substr(cCatchError,1)
614 </pre></div>
615 </div>
616 </div>
617 </div>
618
619
620           </div>
621         </div>
622       </div>
623       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
624         <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
625 <ul>
626 <li><a class="reference internal" href="#">自然言語プログラミング</a><ul>
627 <li><a class="reference internal" href="#index-1">沿革</a></li>
628 <li><a class="reference internal" href="#index-2">用例</a></li>
629 <li><a class="reference internal" href="#and">キーワード‘And’の変更</a></li>
630 <li><a class="reference internal" href="#index-4">演算子 ‘+’ の変更</a></li>
631 <li><a class="reference internal" href="#is">‘=’ 演算子を ‘is’ へ変更するには</a></li>
632 <li><a class="reference internal" href="#eval">自然言語コードで Eval() を使うには</a></li>
633 <li><a class="reference internal" href="#bracestart-braceend">BraceStart と BraceEnd メソッド</a></li>
634 <li><a class="reference internal" href="#braceexpreval">BraceExprEval メソッド</a></li>
635 <li><a class="reference internal" href="#index-9">本物の自然言語コード</a></li>
636 <li><a class="reference internal" href="#braceerror">BraceError() メソッド</a></li>
637 <li><a class="reference internal" href="#index-11">美しい自然言語コード</a></li>
638 </ul>
639 </li>
640 </ul>
641
642
643   <h4>前のトピックへ</h4>
644   <p class="topless"><a href="declarative.html"
645                         title="前の章へ">入れ子構造の宣言型プログラミング</a></p>
646   <h4>次のトピックへ</h4>
647   <p class="topless"><a href="naturallibrary.html"
648                         title="次の章へ">自然言語ライブラリの用法</a></p>
649   <div role="note" aria-label="source link">
650     <h3>このページ</h3>
651     <ul class="this-page-menu">
652       <li><a href="_sources/natural.txt"
653             rel="nofollow">ソースコードを表示</a></li>
654     </ul>
655    </div>
656       
657 <form action="search.html" method="get">
658   <input type="text" name="q" placeholder="Search" />
659   <input type="hidden" name="check_keywords" value="yes" />
660   <input type="hidden" name="area" value="default" />
661 </form>
662       
663         </div>
664       </div>
665       <div class="clearer"></div>
666     </div>
667 <footer class="footer">
668   <p class="pull-right">
669     <a href="_sources/natural.txt"
670        rel="nofollow">Page Source</a> &nbsp;
671     <a href="#">Back to Top</a></p>
672   <p>
673     &copy; Copyright 2016-2020, Ring Team.<br/>
674     Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
675   </p>
676 </footer>
677   </body>
678 </html>