この記事は Lisp Advent Calendar 2017 の 17 日目の記事です。 eval は強力ではあるものの、その強力さ故に現代的な Lisp ではあまり使われない。 Lisp 以外の eval のある言語、例えば JavaScript ではその存在はほとんど忘れられているような気がするし、 Ruby でも instance_eval や class_eval といった表現力を弱めた変種が使われることはあれど、素の eval が使われることはほとんどないように思う。 Lisp の場合でも、普通は eval を使わずに簡単な DSL を作って自分でインタプリタを書いてしまうことが多いのだけど、 DSL が複雑になってくると少し面倒さを感じないでもない。 そんなときに R7RS Scheme の eval がちょうどうまく使える例があったので紹介したい。 R7RS Scheme
この記事はCAMPHOR- Advent Calendar 2017 11日目の記事です. アブストラクト 漸進的型付けは,ひとつの言語の中で静的型付けと動的型付けをスムーズに組み合わせるための技術です. よく知られた特徴は any 型を使った静的型付けで, TypeScript や Python といったプログラミング言語には既に実装されています. しかし,理論と実際のプログラミング言語の間には大きなギャップが存在します. 特に,漸進的型付けの理論で提案されているキャストを用いた動的型検査が実装されていないために, 静的型付けの恩恵を十分に得られていないという問題があります. この記事では,まず漸進的型付けの理論をコード例を用いて紹介し, 現状の漸進的型付き言語が抱える問題を解説します. そのあとで,漸進的型付き言語が目指すべき目標を理論的視点から論じます. それらの目標は,静的型付けを
http://web.mit.edu/jemorris/humor/500-miles From: Trey Harris <trey@sage.org> 今から私が書く話は、起こりようのない問題についてだ。この話を広く一般に公開してしまうのは惜しい。というのも、いい酒の話のネタになるからだ。この物語は、退屈な詳細や問題を隠すために、多少事実を変えていて、物語を面白く脚色している。 数年前、私はキャンパスのメールシステムを保守する仕事をしていて、統計学部の学部長から電話を受けた。 「大学の外にメールを送るのに不具合が発生しているのだが」 「どんな問題でしょう?」と私はたずねた。 「500マイル以上メールを送れないのだよ」と学部長は説明した。 私はラテを吹き出した。「何だって?」 「ここから500マイル以上離れた場所にメールを送信できないのだよ」と学部長は繰り返した。「実際は、もう少しあるの
Try Red Hat products and technologies without setup or configuration fees for 30 days with this shared Openshift and Kubernetes cluster.
(高校で習うはずの)数学的帰納法をはじめとする帰納法(induction)と、(π計算など並行プロセス計算に出てくる)双模倣(bisimulation)をはじめとする余帰納法(coinduction)は、双対(dual)であると言われます(例)。双対というのは、大雑把に言うと、論理式のド・モルガンの法則 ¬(A∨B) ⇔ ¬A∧¬B と ¬(A∧B) ⇔ ¬A∨¬B のように、何か一組のもの(ここでは∧と∨)をひっくり返しても同じ式が成り立つという関係です(例)。 しかし、自分は学部4年ぐらいのときに余帰納法(というか双模倣)を習って、「(数学的帰納法のような)帰納法と(双模倣のような)余帰納法が双対」と聞いても、何となく「余帰納法は結論を仮定する(?)から、仮定を仮定する(?)帰納法と反対なのかなあ」と思うぐらいで、恥ずかしながら何が双対なのかよくわかりませんでした。かといって、詳しい人
むかしむかし、ある森のそばに木こりが住んでいました。貧しいくらしをしていましたが、毎日いっしょうけんめい働いていました。 その日も、木こりは湖のそばで木を切っていました。森のなかには木こりが斧を木に打ち込む、カーンカーンという音が響いていました。 あとひとふりで木が倒れそうになったところで、木こりは力を込めて斧を振りました。しかしどうしたわけか、斧はすぽんと木こりの手から抜けてしまいました。斧はひゅーんと空を飛び、湖にボチャーンと落ちてしまいました。湖は底が見えないほど深く、斧はすぐに沈んでいってしまいました。 「ああ、どうしよう。斧はあの一本きりしかないのに。あれがなくちゃあ仕事ができなくて、俺は餓え死にしてしまう」 木こりが頭をかかえていると、湖の水面がだんだん盛り上がってくるではありませんか。木こりがぽかんとそれを見ている間に、水はどんどん高く盛り上がり、ついにはその中から人の形をし
CPU実験が終わって半年ですが、忘れる前にやったことを書き残しておこうと思います。 並列化ーー CPU実験 全体 4人程のチームで、自作CPU、コンパイラ、アセンブラ、シュミレータ等を作り、最終的には高級言語(mincamlというOcamlのサブセット)で書かれたプログラム(レイトレーシング)を実行速度を競います。CPU実験の詳細は検索すると結構出てくるかと思います。 レイトレプログラムの出力結果 自班の最終成果 『レイトレプログラムをマルチコアで並列実行する』ということをやりました。結論から言うとこれがかなり上手いこといって、歴代最速記録を大幅に(1/2位?)更新することができました。 具体的には記録は以下の通りです。詳しくは*1 4.666948 s(7コア、逐次実行と比べ演算順序が変わり得る) 5.193502 s(6コア、演算順序が変わらない) *実験の条件も年々良くなっているので
First published Wed Apr 2, 2003; substantive revision Mon Mar 4, 2024 Provability logic is a modal logic that is used to investigate what arithmetical theories can express in a restricted language about their provability predicates. The logic has been inspired by developments in meta-mathematics such as Gödel’s incompleteness theorems of 1931 and Löb’s theorem of 1953. As a modal logic, provabilit
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く