タグ

ブックマーク / sumii.hatenablog.com (3)

  • 純粋関数型言語で定義できない純粋な関数 - sumiiのブログ

    並列論理和の続きで真のエキスパート氏から教えていただいた話(の劣化コピー)。並列論理和は、逐次言語では定義できないけど「計算可能」な(並列言語では定義でき、領域理論でも連続になる)関数でしたが、その親戚というか兄弟です。 MLで(実はHaskellでも良いのですが)、unit→unit型の純粋な(=副作用のない)関数は、 let f1 () = () let rec f2 () = f2 () の2つがあります。ただし、たとえ内部の実装が異なっても、外部から観察できる振る舞いが同じ関数は同じとみなします。たとえば let f1' () = try (raise E) with E -> () なるf1'はf1と同じ(かつ純粋)とみなします。 以下、「関数」としてデフォルトでは「振る舞いが純粋な関数」だけを考えることにします。すると、上と同様に、(unit→unit)→unit型の関数は l

    純粋関数型言語で定義できない純粋な関数 - sumiiのブログ
  • 操作的意味論 vs 表示的意味論 - sumiiのブログ

    http://d.hatena.ne.jp/ranha/20090615 (via http://d.hatena.ne.jp/yad-EL/20090615/p2) 「諸君らの愛した表示的意味論(R5RS)は死んだ。なぜだ?」 う、これは私も(というか私ごときでは)迂闊に発言できないテーマです…。Scheme (R5RS → R6RS)に固有の事情は知らないので、(もしあれば)メーリングリストなどでの議論を検索したほうが詳しいかもしれません。追記:R5RSの操作的意味論と、その表示的意味論に対するメリットに関しては論文があるようです。 迂闊に発言すると、(一般論としては)「操作的意味論のほうが理論が簡単だから」だと思います。要するにプログラムの「意味」というより「動作」を状態遷移(式の書き換え)で表しているだけなので…。歴史的には、操作的意味論も(仮想機械やインタプリタによる定義から)項

    操作的意味論 vs 表示的意味論 - sumiiのブログ
    yhara
    yhara 2009/06/18
  • setjmp/longjmpとローカル変数 - sumiiのブログ

    call/ccが出てきたので、ついでに: #include <setjmp.h> int main() { int x, y; jmp_buf k; x = 123; y = setjmp(k); if (y == 0) { x = 45; longjmp(k, 1); } return x + y; } はいくつを返すか、という話。 > gcc jmp.c -o jmp > ./jmp > echo $status 46 > gcc -O3 jmp.c -o jmp > ./jmp > echo $status 124xにvolatileをつけ忘れると、こういうこと↑になります… Cf. > (let ((x 123)) (let ((y (call-with-current-continuation (lambda (k) (set! x 45) (k 1))))) (+ x y)))

    setjmp/longjmpとローカル変数 - sumiiのブログ
    yhara
    yhara 2008/07/30
    SML(of NJ)にもcallccがあるのかー
  • 1