Upgrade to Pro — share decks privately, control downloads, hide ads and more …

factor #RC

factor #RC

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.
PRO

August 08, 2012
Tweet

Transcript

  1. Takuya Shiotari

  2. Factorとは • Slava Pestovが設計と実装 • 連鎖性言語 • 強い動的型付けのスタック指向 • Joy、Forth、LISP、Selfに影響を受けた

    • 優れたパフォーマンス • 充実したライブラリ
  3. 連鎖性言語と適用型言語 • 引数を関数に適用することに よって評価が行われる • C、Ruby、PHP、Javascript、 Haskell、Java • 1つのデータのかたまりを操作 する関数を複数作成し、この

    データのかたまりが関数から関 数へと渡されることで評価が行 われる • 関数の合成は、複数のプログラ ムを連鎖させることによって記 述する • Forth、Joy、PostScript、Cat、 Factor 適用型 連鎖性
  4. • スタック型言語と連鎖性言語は厳密には同じで はないが、ほとんど同じ(おそらく、連鎖性言語 の実装がスタック型言語) • 再帰関数用のコールスタックの他に関数間で値 をやり取りするためのデータスタックを持ってい る • スタック型言語のプログラマが指す「スタック」は

    データスタックのこと スタック型言語
  5. Factorのパーサー • ホワイトスペースでトークンに分解される • 大文字・小文字は区別される 2X+ 2 X + 2

    x +
  6. 基本構文 プログラムはワードとリテラルから構成される ワード 名前付き関数 クォーテーション 無名関数 コンビネータ 高階関数 ボキャブラリー モジュール

    10 sq 5 - ! 10 5 はリテラル、sq -はワー ド
  7. ワード定義 : sq ( x -- ) dup * ;

    ① ② ③ ④ ⑤ ① 必ず「:」から始まる ② 新しいワードの名前 ③ スタック効果宣言(これが引数みたいなもん) ④ ワードの定義 ⑤ 「;」で終了
  8. 制御フロー クォーテーションとは評価可能なコードを含むオブジェクトのこと 2 2 + ! 4がスタックに積まれる [ 2 2

    + ] ! クォーテーションがスタックに積まれる : sign-test ( n -- ) dup 0 < [ drop "negative" ] [ zero? [ "zero" ] [ "positive" ] if ] if print ; 制御フローにクォーテーションが使われる
  9. Factorの特徴 var customer = ...; var price = customer.orders[0].price; orders>>

    first price>>
  10. Factorの特徴 var customer = ...; var orders = (customer ==

    null ? null : customer.orders); var order = (orders == null ? null : orders[0]); var price = (order == null ? null : price); dup [ orders>> ] when dup [ first ] when dup [ price>> ] when
  11. Factorの特徴 MACRO: maybe ( quots -- ) [ '[ dup

    _ when ] ] map [ ] join ; { [ orders>> ] [ first ] [ price>> ] } maybe
  12. 次回のテーマ