タグ

Grassに関するokagawaのブックマーク (16)

  • リリカル☆Lisp開発日記 » Blog Archive » うはwwwPrologでGrass実装したwwww

    つい最近Grassという言語を知りました。 登場したのは結構前みたいですね。 見事に時代に乗り遅れました。 しっかりとした操作的意味論が載っていたため、 R6RSの時と同様にPrologで作ってしまいました。 ソース: grass-sem-utf-8.swi 全角文字の入力は受け付けますが、 表示には対応していません。 実行結果 Yes ?- evaluate("うほwWWwwww",R). w R = [119, []] ; No ?- evaluate("wwWWwv wwwwWWWwwWwwWWWWWWwwwwWwwv wWWwwwWwwwwWwwwwwwWwwwwwwwww", R). ww R = [119, []] ; No This entry was posted on 月曜日, 3月 24th, 2008 at 4:05 AM and is filed under プログ

  • ちょっと草植えときますね型言語 Grass

    _, ._ ( ・ω・) んも〜 ○={=}〇, |:::::::::\, ', ´ 、、、、し 、、、(((.@)wvwwWWwvwwWwwvwwwwWWWwwWw wWWWWWWwwwwWwwvwWWwWwwvwWWW 作ってみたwwwww とりあえず公開wwwwwwwっうぇ 日語版はてきとーです.きっと英語版のほうが詳しいです. 実装 インタプリタ Interpreter written in Standard ML (accept US-ASCII only) by UENO Katsuhiro Interpreter written in Ruby by UENO Katsuhiro Interpreter written in ニコスクリプト Interpreter written in Prolog by zick Interpreter written in Java b

  • Grass のインタプリタを書いてみたよ - Life Goes On

    Haskell で Grass のインタプリタを書いてみました。以前から書いてみたいとは思っていたのですが、どこから手をつければいいものやら分からず、半年近く経ってしまいました。悲願達成。 Haskell 版は既に mr_konn さんが書いているので、目新しいものではありません。あくまでも自分のため。 とりあえず動くものはできたのですが、まだまだ改善の余地がありそう。悩んでいるのはこんなところです。 サンプルの「はいはいわろすわろす」を動かしたい(Shift_JIS とかでの出力もしたい)ので、UTF-8 モジュールは使っていません。そうすると自前で全角文字のハンドリングをする必要があります。UTF-8 なり Shift_JIS なり EUC-JP なり決め打ちで変換することになりそう(関数 filter')なのですが、もうちょいスマートなやり口はないものでしょうか。あと String

    Grass のインタプリタを書いてみたよ - Life Goes On
  • 関数型言語Grass勉強会 — ありえるえりあ

    関数型言語Grass勉強会 岩永さんによる関数型言語Grassの勉強会資料です。scalaで書かれた実装もあります。内田さんによるC言語の実装も添付します(grass.zip)。 grass.ppt :プレゼン資料 grass.scala :scalaで書いたGrassインタプリタ grass.zip: C言語の実装(Grassインタプリタ)

    okagawa
    okagawa 2010/01/01
    Scala, C
  • vネタばれ - * *scrap*

    http://golf.shinh.org/p.rb?v#Grass grass.el形式で '( (abs rec (f c) ((app succ c . sc) (app w sc . v?) (app v? c) (app 1 f) ;c or f (app 1 1) ;true or f f (app 1 sc) ;(true sc) or (f f sc) (app out 3) ;(out sc) or error )) (app rec rec) (app 1 w) ) irieさんと同じコードになっただろうと思ってたら大分違っていて、あちらはエラーをはかないコードになっていた。再帰関数の最後の3つの適用がスマート。面白いなー。 他の人のも後で読む。 ちなみに、2番目に書いた56バイトのコード wWWWwWwwwwwWwwwWwwwv ; succ_or_v wwWWwWW

    vネタばれ - * *scrap*
  • 2008-09-14

    最終的に1525バイトになった。劇的に縮められる新機軸はもうなさそうなのでネタバレ 続きを読む 上の続き 続きを読む (m-n)%3 をどうやって計算するか? 続きを読む wwWWwWWWwWWWWWWw # s2n1 vwwWWwWWWw # s2 vwWWwwwWwwwwwwWWWwWWWWWwwwwWwwWWwWwwwwwwwwwwww # mkwWv vWwwwWWwww # ch_v, ch_W vwwWWWWWWWWww # mkout vWwwwWWwwwwwwwwwwWWWwwww # out_v, out_w, out_W vwWwwwwWwwwwWwwww # tr1 = triplet(out_v, out_w, out_W) vwWWWwWWWWWw # out_Ww vwWWWWwWWWw # out_WWw vwWWWWWWWwWWWw # out_vWWw v

    2008-09-14
  • Grass で quine - まめめも

    この記事は Quine Advent Calender 2014 の 102 日目になりました。ref: http://d.hatena.ne.jp/shinichiro_h/20080910#1220988953 やろうやろうと思って放置してたら先にやられてしまったー。一念発起して完成させて、がんばって縮めて見ました。 $ time ruby grass.rb quine.www > quine2.www real 0m21.830s user 0m20.440s sys 0m1.390s $ diff quine.www quine2.www $ wc -c quine.www 9787 quine.wwwでも試しに golf 鯖に投稿してみたら、over 10K って言われた。なぜー。 あとは菊さんの 100B が楽しみですね。 以下どーんとソース。 どーん。 wWwwwwWWWwv

    Grass で quine - まめめも
  • Grassとラムダ計算とLisp - * *scrap*

    Lispのlambda式の使い方が分かってきた頃に書き溜めたラムダ計算遊び用のコードと組み合わせてみる。 まず、繰り返し関数適用してく時にCommonLispだとfuncallが大変ウザくなるので、省略するための簡単なユーティリティー関数。 (defun app (&rest arg) (reduce #'funcall arg)) (defun $ (&rest arg) (reduce #'funcall arg :from-end t)) 任意の数の関数を引数にとって、appは左から、$は右から順番に適用していく。 $はHaskellにこんな感じの演算子があった様な気がしたので。 appも記号にしたかったけど良いのが思いつかなかった。 例 ($ out succ out succ out succ w) 何語だコレって感じですが。スマートな書き方が分からない。 とりあえずこれをxyz

    Grassとラムダ計算とLisp - * *scrap*
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • 2008-09-20

    終わりました。53Bの解説…は面倒くさいので、擬似コードと分かる人にしか分からない解説を。 f(g, c){ cp = c + 1 b = 'w' == cp c_or_cp = b(c, cp) c_or_g = b(c, g) # ここで上で使った残骸を再利用 c_or_g(c_or_g, c_or_cp) # 真なら1引数を取りc(つまりv)を返し、偽なら再帰呼び出し } r = f(f, 'w') v = r(r) out(v)ポイントは、分岐の書き方。 真偽値は二引数をとり、真なら第一、偽なら第二引数を返す関数で表されるのですが、分岐を二つ作る際に、真の方は同じものを使うことで、関数適用の回数を一回抑えています。 で、このパターンはどう考えても自分も何度も書いてたのに、なんで負けたんだーと思ってたんですが、確かまだこのパターン書いてたときは、関数適用順によって長さ変わるのに気づい

    2008-09-20
  • Yet Another Grass 処理系 - まめめも

    http://github.com/mame/grass-misc/tree/master/ こないだ作った Grass インタプリタは yagi.rb (Yet Another Grass Interpreter) という名前にしておきました。 yagc.rb は Grass コンパイラ (というほど大したことしないけど) で、Grass のプログラムを Ruby に翻訳するツール。 $ ./yagc.rb hello.www > hello.rb $ ruby19 hello.rb; echo Hello, world!初めて Proc#curry を使った。 yagd.rb は逆コンパイラで、yagc.rb で生成した Ruby プログラムを Grass に戻すツール。 $ ./yagd.rb hello.rb > hello2.www $ ./yagi.rb hello2.www;

    Yet Another Grass 処理系 - まめめも
    okagawa
    okagawa 2008/09/16
    Grass <-> rubyコンバータ
  • grass.el - irie @ ウィキ

    #center(){&sizex(7){grass.elのぺえじ}} _, ._ ( ・ω・) んも〜 ○={=}〇, |:::::::::\, ', ´ 、、、、し 、、、(((.@)wvwwWWwvwwWwwvwwwwWWWwwWw wWWWWWWwwwwWwwvwWWwWwwvwWWW *何これwwwwwww Emacs上で、[[ちょっと草植えときますね型言語Grass>http://www.blue.sky.or.jp/grass/doc_ja.html]]のプログラムを実行や作成するためのプログラムです。 元々は[[ひげぽん氏のgrass.scm>http://d.hatena.ne.jp/higepon/20080605/1212678422]]を参考にして処理系だけ作るつもりだったのが、いつの間にか巨大化wwww ラムダ計算の学習にどうぞ。 ([[スクリーンショット>gras

    grass.el - irie @ ウィキ
  • Glid: Grass/Let interpreter and decompiler - λx. x K S K @はてな

    草言語Grassが流行っているようなので,Grassプログラミング支援ツールGlidを公開します. Objective Camlで実装されているという点ではYTさんに先を越されてしまいましたが, より多くの機能を提供しています. といっても,実装の効率はあまりよくないので,速いGrass処理系が欲しいだけの方にはあまり役に立ちません. Glidは,簡単にいうと言語Grassと言語Letの間の双方向の翻訳ツールです. 言語Letは,次の文法で与えられる単純な関数型言語でGrassよりは楽にプログラムが書けます. Prog := Def* Def := let Var Var* = Exp Exp := Var | Exp Exp | let Var = Exp in Exp | Exp;Exp Var := In | Out | Succ | W | [_a-zA-Z0-9]+ 主な使用目的

    Glid: Grass/Let interpreter and decompiler - λx. x K S K @はてな
    okagawa
    okagawa 2008/09/14
    Grass <-> Letコンバータ
  • 紫ログ:Grass on AWK - AWKでちょっと草を - livedoor Blog(ブログ)

    ちょっと草植えときますね型言語 GrassをAWKで実装してみるの巻。 Grass は λ-calculus(ラムダ計算)をベースにした「関数型言語」で、「関数定義」「関数適用」のみの組合せでプログラムを表現します。使う文字は W,w,v の3種類。(その他の文字は無視) 今回、こういう言語の実装には正直向いていなさそうなAWKで実装してみました。 AWKの上でYコンビネータが動いているのは自分でもあまり想像したくないのですが・・・grass.elのところにあるサンプルのうち、入力を伴うもの以外はとりあえず全部通るようです。 言語仕様としては、家ドキュメントのほか、ここが参考になりました。 せめて配列がAWKでファーストクラスなオブジェクトだったら楽なんですが... 仕方がないので、文字列でなんでも表現しようではないか 関数は "/i[j]a.b;c.d;e.f;...;y.z;" のよ

  • 本を読む bashでGrassをキメたら悪酔いしたwww

    ,r;;;;ミミミミミミヽ,,_ ,i':r"    + `ミ;;, __,、           ≡     彡        ミ;;;i 〃ニ;;::`lヽ,,_           ≡  彡 ,,,,,、 ,,,,、、 ミ;;;! 〈 (lll!! テ-;;;;゙fn    __,,--、_  ..   ,ゞi" ̄ フ‐! ̄~~|-ゞ, ≡ /ヽ-〃;;;;;;;llllll7,,__/"  \三=ー"."ヾi `ー‐'、 ,ゝ--、' 〉;r'  ≡  bashは自分を評価することができるんです >、/:::/<;;;lllメ   \ヾ、  ヽTf=ヽ  `,|  / "ii" ヽ  |ノ j,, ヾて)r=- | ヾ:   :ヽ;;:     | l |  l  ''t ←―→ )/イ^    ≡ awkとは違うんです ,イ ヽ二)l(_,>" l|    ::\;::    |

    okagawa
    okagawa 2008/09/14
    bashによるGrassの実装
  • v - Note

    インタプリタは楽勝で書けたんですけど(一応仕様以外見てないです)、肝心のgrassコードを書ける気が全くしません。 WWwwwでxが用意できて、そこから1インクリメントするのにWWWw,WWWWw,WWWWWw...しかないんじゃないでしょうか。 そもそもトップが56バイトってことは、ですね……3^56ぐらい、真面目に考えるより全探索したほうが早いんじゃないでしょうか。*1 *1:3^56 = 523347633027360537213511521多いなorz

    v - Note
  • 1