Diff
Not logged in

Differences From Artifact [33d07971634f6989]:

To Artifact [a39b25f2bef916f0]:


13 <p> 13 <p> 14 あと、 やたらとマクロの章が長くなっていますが、 この部分は、 14 あと、 やたらとマクロの章が長くなっていますが、 この部分は、 15 レイヤ機能を入れたら自動的にすごく自然にマクロが入るなーと思って、 15 レイヤ機能を入れたら自動的にすごく自然にマクロが入るなーと思って、 16 おまけで実装してみた程度のものです。 16 おまけで実装してみた程度のものです。 17 あんまり重要ではないので、適当にスルーして下さいませ。 17 あんまり重要ではないので、適当にスルーして下さいませ。 18 単に、適当に入れたら適当で微妙な部分が多く残ってしまったので注意書きが増えているだけで…。 18 単に、適当に入れたら適当で微妙な部分が多く残ってしまったので注意書きが増えているだけで…。 19 </p> 19 </p> > 20 <p> > 21 言い訳ついでにもう一つ言い訳ですが、この言語は、少なとも今のところ、 > 22 実用に使うことを考えた設計にはなっていません。どちらというと、 > 23 Brainfuck や Unlambda や Whitespace の仲間と思ってお使い下さい。 > 24 </p> 20 25 21 $(DDOC_MEMBERS 26 $(DDOC_MEMBERS 22 27 23 $(SECTION Syntax, $(SECBODY 28 $(SECTION Syntax, $(SECBODY 24 <p> 29 <p> 25 文法について。 30 文法について。 26 字句解析がわりと適当なので、 31 字句解析がわりと適当なので、 ................................................................................................................................................................................ 519 </p> 524 </p> 520 <pre> 525 <pre> 521 @@type = fun(x) { 526 @@type = fun(x) { 522 if( _isint(x) ) then "int" 527 if( _isint(x) ) then "int" 523 else if( _isstr(x) ) then "str" 528 else if( _isstr(x) ) then "str" 524 else if( _isbot(x) ) then "runtime error" 529 else if( _isbot(x) ) then "runtime error" 525 else "type error" 530 else "type error" 526 } | 531 }; 527 </pre> 532 </pre> 528 <pre> 533 <pre> 529 &gt;&gt; @type( 1 ) 534 &gt;&gt; @type( 1 ) 530 int 535 int 531 &gt;&gt; @type( 2 ) 536 &gt;&gt; @type( 2 ) 532 int 537 int 533 &gt;&gt; @type( "foo" ) 538 &gt;&gt; @type( "foo" ) ................................................................................................................................................................................ 568 </p> 573 </p> 569 <pre> 574 <pre> 570 @type "if" (c, t, e) {@value( 575 @type "if" (c, t, e) {@value( 571 if( @type(c)=="int" || @type(c)=="runtime error" ) then 576 if( @type(c)=="int" || @type(c)=="runtime error" ) then 572 @type( int_int_int(t(), e()) ) 577 @type( int_int_int(t(), e()) ) 573 else 578 else 574 "type error" 579 "type error" 575 )} | 580 )}; 576 </pre> 581 </pre> 577 <p> 582 <p> 578 関数が自動リフトされるので、フィボナッチ関数の型を調べることができます。 583 関数が自動リフトされるので、フィボナッチ関数の型を調べることができます。 579 </p> 584 </p> 580 <pre> 585 <pre> 581 &gt;&gt; def fib(x) { if x<2 then 1 else fib(x-1)+fib(x-2) }; 586 &gt;&gt; def fib(x) { if x<2 then 1 else fib(x-1)+fib(x-2) }; 582 &gt;&gt; @type( fib(100000000000000) ) 587 &gt;&gt; @type( fib(100000000000000) )