2021年1月12日火曜日

Python8暫定仕様(3)

「OctalPython」作成のための断片的備忘録です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
/*「」は定義行のみ(他ではシアン).「」の語句があるパラグラフは「IDも」*/

%830:Python8(3)/*〔修正案〕*/
`▼
--------------------------------------------------------------------------------
(0)まず「Python8(2)」の修正を復習・変更する./*〔【(1)①】の実装が目標〕*/
 「(□★)」は修正の要点;「(□☆)」は変更案
(1)参考資料/*〔「Python7」のコピーに加筆〕*/
 ①「整数で考える剰余類(1)」  @https://www.blogger.com/blog/post/edit/6943714883075862421/3176120039988210411
 ②「とほほのPython入門」@http://www.tohoho-web.com/python/
 ③「組み込み関数」@https://docs.python.org/ja/3/library/functions.html
 ④【[_Trial-1]】  @https://www.blogger.com/blog/post/edit/6859150935899261916/7184207965405872964
 ⑤「WILDの処理系」/*【[%11].(1)④】*/
@https://drive.google.com/file/d/1191Ev62Uo9yha0w87Kl5A01DsVCP7e-x/view?usp=sharing
 ⑥【[_Trial-14]】
  ・%E11:資料の参照
  ・%E2:[Trial_□]のパラグラフに関するメモ
  ・%E3:行番号の付加
(2)トークン「□」を「`□_」と明示して字句解析を容易にする.
 ①「'_'」の末尾に1個以上の「' '」付加してもよい./*〔途中改行不可〕*/
  /*〔Python7 で使えない文字「$」,「?」,「`」も使用〕*/
 ②文字列「`"□"_」を「"□"_」と略記してもよい.
 ③「'□'」はASCIIの1文字の16進表示./*〔「'0D'」=「char(13)」 〕*/
(3)行番号を行頭から48文字目の '#' の後に置く
  ①「OctalPython」の行番号は奇数桁の8進数./*【[%E3](2)③.[Trial_14]】*/
(4)【[%11].[Trial_1]】/*「WilD.pdf」*/の記号の表現適宜流用する
(5★)「OctalPython」ではの8進数を奇数桁で表示して先頭に「&」を付加する.
  /*〔「Python8」では奇数桁にして「&01234_」=「"&01234"_」〕*/
(5☆)「OctalPython」では奇数桁の8進数「□」を「&□_」で表示する.
(6)「str8('abc\n')」を「line8('abc')」と略記.
 ①「block8(\9002\9line8('abc'))」は
  ブロック内の2行目が「str8('abc\n')」であることを明示.
 ④ブロック内の行数を「&777_以下」に限定/*「末尾に空白行」*/
(7)「str9('ab\9embeded\9c\ndef\n')」の「\9embeded\9」はコメント
(8)「Decimal クラス」の概要
https://docs.python.org/ja/2.7/library/decimal.html
・9.4.1. クイックスタートチュートリアル
 ①普通、 decimal を使うときには、モジュールを import し、
  現在の演算コンテキストを getcontext() で調べ、
  必要なら、精度、丸め、有効なトラップを設定します:
 ②Decimal インスタンスは、整数、文字列、浮動小数点数、またはタプルから構成可能。
 ③新たな Decimal の有効桁数は入力の桁数だけで決まります。
  演算コンテキストにおける精度や値丸めの設定が影響するのは算術演算の間だけです。
 ④decimal はほとんどの場面で Python の他の機能とうまくやりとりできます。
  decimal 浮動小数点小劇場 (flying circus) をお見せしましょう:
 ⑤いくつかの数学的関数も Decimal には用意されています:
 ⑥quantize() メソッドは位を固定して数値を丸めます。
  このメソッドは、金融アプリケーションで便利です:
 ⑦前述のように、 getcontext() 関数を使うと現在の演算コンテキストにアクセスでき、
  設定を変更できます。ほとんどのアプリケーションはこのアプローチで十分です。
 ⑧decimal モジュールでは、すぐ利用できる二つの標準コンテキスト、
  BasicContext および ExtendedContext を提供しています。
  前者はほとんどのトラップが有効になっており、とりわけデバッグの際に便利です:
・9.4.2. Decimal オブジェクト
 ①class decimal.Decimal([value[, context]])
  value は整数、文字列、タプル、 float および他の Decimal オブジェクトにできます。
  value を指定しない場合、 Decimal('0') を返します。
  value が文字列の場合、先頭と末尾の空白を取り除いた後には
  以下の 10進数文字列の文法に従わなければなりません:
 ②10進浮動小数点オブジェクトは、 float や int のような
  他の組み込み型と多くの点で似ています。
  通常の数学演算や特殊メソッドを適用できます。
 ③ Decimal オブジェクトはコピーでき、
  pickle 化でき、print で出力でき、辞書のキーにでき、集合の要素にでき、
  比較、保存、他の型 (float や long) への型強制を行えます。
 ④10進オブジェクトの算術演算と整数や浮動小数点数の算術演算には違いがあります。
  10進オブジェクトに対して剰余演算を適用すると、
  計算結果の符号は被除数 の符号と一致します:
 ⑤整数除算演算子 // も同様に、実際の商の切り捨てではなく
  (0に近付くように丸めた) 整数部分を返します。
  そうすることで通常の恒等式 x == (x // y) * y + x % y が保持されます:
 ⑥演算子 % と演算子 // は (それぞれ)
  仕様にあるような 剰余 操作と 整数除算 操作を実装しています。
 ⑦Decimal オブジェクトは一般に、算術演算で
  浮動小数点数と組み合わせることができません。
(9)「(8)」の仕様は気にせず「class.Octal.Py8」を考えます.
 ①「x == gamma(x) + delta(x)」は必須./*【[9.4.2].(8)】*/
 ②「`&81_ := `&10_」,「`&83_ := `&1000_」と定義したい.
 ③「Python8」で扱う実数は固定小数点のみ./*「Δ(3 / 2) == 1.4」*/
 ④「8進数」表示は論理演算が容易.
  /*【[%820](5)③】:〔プログラミング教育に重宝〕*/
 ⑤「ビット演算子(~, &, |, ^, <<, >>)」/*【[%830](1)②】*/
  の代わりに次の演算子を用いる./*〔各行はデフォルトのフォント〕*/
  ・「`not,_ &□_」:=「~ &□_」
  ・「&□1_  `.and,_ &□2_」:=「&□1_  &□2_」
  ・「&□1_ `.or_ &□2_」:=「&□1_ | &□2_」
  ・「&□1_ `.xor,_ &□2_」:=「&□1 ^ &□2」
  ・「&□1_  `.shift, - (_&3_)」==「&□1_ << (&3_)」
  ・「&□1_ `.shift,_ &3_」==「&□1_ >> (&3_)」
 ⑥「&□_」を「2の補数★」表示の整数と考える.
  ★https://en.wikipedia.org/wiki/Two%27s_complement
  ☆https://en.wikipedia.org/wiki/Two's_complement
  ・
-------------------------------------------------------------------------------
`▲「Blogger」では「スクリプトをCourier□★」で表示★https://www.blogger.com/blog/post/edit/6859150935899261916/7173240099006907548

%837:Note in English
`▼
--------------------------------------------------------------------------------
(0)Examples of Octal_Python scripts are shown.
(1)Ex.1/*〔copied from [%817]〕*/
------------------------------------------------------------
  def Delta(k, m):
      val = k % m
      return val
  print(Delta(5, 3))
------------------------------------------------------------
 ①対話モードでは、help() で様々なオブジェクトのヘルプを参照することができます。
  「http://www.tohoho-web.com/python/start.html#interactive
 ②「Δ(5 / 3) == 2 / 3 == &2_ / &3_ =="1.5"」;「m * Δ(k / m) == k
(2)Ex.2/*〔copied from [%812]〕*/
 ①[%812](5)で述べた関数「`isPrime(63)_」の実装を「エラトステネスの篩★」で考える
  ☆https://cloud.google.com/translate/docs?hl=ja/ /*〔Google_translation〕*/
  ★https://ja.wikipedia.org/wiki/エラトステネスの篩
  ☆https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
 ②「make lists as follows」
  list_p = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,
      53,59,61,67,71,73,79,83,89,97]
   list_f = [63,]
  ★https://ja.wikipedia.org/wiki/素因数分解
  ☆https://en.wikipedia.org/wiki/Integer_factorization

 ③「list_p[19] > 63」だから「for k in range(1, 19)」で
  「list_p[k] == 63」となる「k」が存在しないので「63」を素因数分解する.
 ④「for k in range(1, 19)」で「y == 63 / list_p[k]」となる「y」を
  「list_f」に追加.
 ⑤「list_f == [7, 3, 3,]」が「63」の素因数分解.
 ⑥「(2)①」の「x」が「x * x > 10000」のときは
  「print("This method is unavailable!")」,「return」を実行
  ★https://mathtrain.jp/sosuu
  ★https://ja.wikipedia.org/wiki/素数の一覧
  ☆https://en.wikipedia.org/wiki/List_of_prime_numbers
(3)「演算子 //」の関連資料
 ①「https://docs.python.org/ja/3/library/decimal.html
    /*〔IBM による汎用十進演算仕様:割愛〕*/
  Decimal オブジェクト
  整数除算演算子 // も同様に、実際の商の切り捨てではなく
   (0に近付くように丸めた) 整数部分を返します。
  そのため通常の恒等式 x == (x // y) * y + x % y が維持されます:
 ②「https://www.javadrive.jp/python/num/index2.html#section1」からの引用.
  演算子の // は商の整数部分だけを取得します。
  ただし浮動小数点数に対する演算の場合は結果は浮動小数点数となります。
  丸め方は整数の場合と同じく負の無限大の方向に丸められます。
  例えば商の結果が 7.56 であれば 7.0 、 -4.785 であれば -5.0 となります。
 ③「https://docs.python.org/3/library/decimal.html」からの引用
  ・「Chrome」は原文を翻訳するので「Edge」で閲覧して「①」を確認.
  The integer division operator // behaves analogously,
  returning the integer part of the true quotient (truncating towards zero)
  rather than its floor, so as to preserve the usual identity
  ・前世紀のコンピュータは絶対値切り捨てを採用していた
   x == (x // y) * y + x % y:
  ----------------------------------------
  >>> (-7) % 4
  1
  >>> Decimal(-7) % Decimal(4)
  Decimal('-3')
  ----------------------------------------
  >>> -7 // 4
  -2
  >>> Decimal(-7) // Decimal(4)
  Decimal('-1')
  ----------------------------------------

 ・「confirmation」
  ----------------------------------------
  (-7) % 4 == -3
 ・The reason why「(-7) % 4」exists in「(x // y) * y + x % y」is explained by
  (-7) / 4 == -1.75 == (-2 + 1) - 0.75 == (-1) + (-3 / 4)
  ----------------------------------------

 ・「generalization」/*〔「x > 0」,「y > 0」〕*/
  ----------------------------------------
  x / y == Γ(x / y) + Δ(x / y)  /*「y * Δ(x / y) == x」*/
  x / y == Γ(x / y) + Δ(x / y)
  (-x) / y == Γ((-x) / y)) + 1 - (1 - Δ((-x) / y)) 
  ----------------------------------------
--------------------------------------------------------------------------------
`▲パラグラフ内を編集すると改行が乱れる(禁:編集)

%839:EOF(@L1G)

0 件のコメント:

コメントを投稿