Concurrent%20Clean の検索結果:

SICP : Ex2.4

Concurrent Cleanでは表現できないと思って飛ばしていた問題なのだけれど、ここ最近の記事の内容と関連すると思ったので、Schemeで書いておくことにします。 問題は、cons, car, cdrを特別なデータ型を仮定せずに、手続きだけで作り出すことができるということを示すというものです。 まず、p.91にある例 (define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y) (else (…

純粋型推論言語

OCamlにも「純粋」という冠をつけたいなあと思って、上の言葉を作ってみました。 最近は、補助的に型推論を持つ言語も登場してきたことだし、そういう言葉があってもいいかもしれない。 純粋型推論言語 ml, OCaml, Haskell, Concurrent Clean

素数リスト

そういえば、Concurrent Cleanでは、素数リストは面白い考え方と書き方で生成できるんですよね。 http://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part1/Chap3.html#sc27

純粋関数型言語が非正格である理由

HaskellやConcurrent Cleanは、純粋関数型言語です。つまり、副作用を持たず、関数を第一級として扱える言語です。(関数プログラミングとか関数型言語とかって何? → [id:lethevert:20060105:p3]) しかも、非正格(normal order)な評価をするという特徴があります。これは、関数の引数や返値として式を渡したときに、その式をいつ計算するかということについて、式の計算結果が必要になるまで計算を行わないという評価戦略を取っていることを意…

クロージャ

自分流の定義をする前に、本来の定義を確認するのが先じゃないでしょうか、ということで。 まず、クロージャという言葉がLispやその他の関数型言語の世界で、静的スコープやファーストクラスの関数オブジェクトで静的スコープを実現するための技術を指す言葉として使われています。 Scheme : R5RSには、closureという言葉は出現しないようだ。 (Scheme:番外 : Scheme入門というサイトに説明を発見。http://www.geocities.jp/shido_tak…

Concurrent Clean : カウンタ

JavaScriptのクロージャを使ったカウンタを真似して、 function makeCounter () { var count = 0; return f; function f () { return count++; } }Concurrent Cleanでも作ってみたけれど、よくみたら、ただの遅延ストリームだった。 ::Counter a = Counter a (Counter a) makecounter = f count where count = [0.…

クロージャ

なんか、気分を害させてしまったようで、申し訳ない。そういうつもりではなかったのだけれど。 言い訳させてもらうと、「クロージャは、可読性を下げるので、小さくするべきだ」という命題が、どう考えても論理的に意味のある命題になっていないように感じたので、クロージャの意味を取り違えているのだろうと思ったのです。(むしろ、クロージャでない方が、可読性を下げると思いますし) で、クロージャのことを、他でもよく見かけた「無名関数のことと誤解する」パターンなのかなと考えて、「無名関数は、可読性…

静的型付け vs. 動的型付け(変数の型無し)

[id:lethevert:20051224:p1]に型について、思っていることを書いたのですが、その続きというか、なんと言うか。 - LispやSmalltalkといった変数の型がない言語があるのですが、僕は、これらの言語を使って、大規模なプログラミングを型エラーなしに作り上げる自信がありません。 また、普通の静的型付け言語では、JavaやらDelphiを使うことが多いのですが、この辺の言語を使っていると「キャスト」を多用するコードを避ける方法がありません。しかし、キャスト…

SICP : Ex1.35

これは、数列の不動点の近似値を求めるという問題。与えられた式から黄金比の近似値を求めた。

SICP : Ex1.28 (番外編:乱数ライブラリについて)

id:lethevert:20060108:p1 で定義した乱数ライブラリを使って回答したのですが、これを使って、参照透過性について多少考察します。 fast_prime_pという関数の内部では、*(Random Int)を生成して、値を取り出して、*(Random Int)を破棄して、取り出した値だけを返しています。そのため、fast_prime_pは(確率は低いものの)評価するタイミングによって、違う値を返す可能性があります。 純粋関数型のConcurrent Clean…

SICP : Ex1.28

これは、素数判定を確率的なテストを用いて行うという問題。fermat-testというテストが本編で解説されていて、問題では、miller-rabin-testというテストを使って書き直すことが求められた。

SICP : Ex1.19

これは、フィボナッチ数を行列を使って高速に計算するという問題。

SICP : Ex1.4

Scheme (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) Delphi function aPlus(x, y: Integer): Integer; begin Result := x + y; end; function aMinus(x, y: Integer): Integer; begin Result := x - y; end; function PlusAbs(x, y: Integer): Integ…

Concurrent CleanをJVMにコンパイルする話

[id:soutaro:20051213:1134505717] - SchemeをJVMにコンパイルする話 [id:lethevert:20051017:p3] emacs + elisp みたいな関係を念頭に eclipse + Concurrent Clean みたいなものを作ってみたい(妄想) - eclipseで動くCleanは、eCleanと呼ぶことに(妄想)

アップルのiMac G5欲しい!

何が何でもクレ。 iMac G5が当たったら、Concurrent CleanのMac版も日本語化するぞ。

遅延ストリーム

Concurrent Cleanの無限リストは、遅延ストリームの一種なのか?

quick sort

http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html ここに、Haskellのquick sortとCのquick sortがあります。 それを参考に、Concurrent Cleanでquick sortを、2種類、書いてみました。非破壊的なものと、破壊的なものの2種類です。

Prolog

昨日、何年前かに買ったPrologの本を開いてみた。 Prologへの入門 (PrologとAI) AIプログラミング (PrologとAI) 買ったときは、見たこともない言語だというだけの理由で買って、読んでは見たものの、結局あまり理解できないままでいたのだ。 しかし、Concurrent Cleanに入門した上で見てみると、Prologがどのように影響力があったのかということが理解できる。そもそも、Cleanの文法は、今まで知っているどの言語とも似ていないと思っていたのだ…

形式検証

Prologのキーワードをたどって下のエントリを見つけました。 [id:bonotake:20051125] そういえば、Concurrent Cleanにも定理証明系がくっついていたような。 Sparkle : http://www.cs.ru.nl/Sparkle/ ここっすね・・・って、重いよこのページ。 - ところで、「正しさ」の証明って、何をどう証明する気なんだろう? と[id:sumii:20051125]で紹介されているVaultのプレゼンを見てみた。 http…

遅延評価

最近連続している遅延評価を考えるシリーズです。 昨日の話とは、別の角度から、考えてみました。 [id:lethevert:20051124:p2]で挙げたソース、 ... where calcs = getCalc where getCalc = [calc x \\ x <- [0..]]という無限リストが使えないという話です。いや、使えるように使えば、使えるものなのですが、最初に期待したほどには使えないということなんです。

遅延評価

[id:lethevert:20051124:p1] 先日、こんなことを書きましたが、結局、あれこれ考えた結果、やっぱりだめだという結論になりました。 何がどうダメだったかは、いずれ時間のあるときにゆっくり書くとして、このことから考えたことを書こうと思います。

遅延評価

昨日([id:lethevert:20051123:p5])は眠かったせいか、何を言いたいのかよく分からないことを書いていたようだ。 要は、遅延評価が現実的に有効かどうかを考えたかった(のだと思う)のだが、 [id:lethevert:20050912:p2] の時にも思ったのだけれど、遅延評価は使いようで、かなり有用なプログラミングツールになりそうだと思っているのだ。 たぶん、基本的な使い方は、こんな形になると思う。 mainFunction = doProcedure w…

モナド

[id:lethevert:20051122:p1] 要は、パターンマッチを使って、「可能な計算状態の集合」の要素に対して、適切な処理を割り当てていきましょうということだよね。 つまり、こんな感じ? ::状態 = A a | B b | C c f :: a -> 状態 f :: b -> 状態 f :: c -> 状態 bind (A a) f = f a bind (B b) f = f b bind (C c) f = f cあ、でも、このコードは、Concurrent…

モナド

ああ、だんだん、モナドが分からなくなってきた・・・ ---- Haskellのdo記法と「Concurrent Cleanで一意型を使ったときのletと「=」に似ている? ---- モナドを使うことのメリットは、以下の3つに要約できる? 一つの値に複数の状態を混在させられる 実行順序を一方向に限定できる 実行結果をモナド内に閉じ込められる で、Cleanの一意型は、以下のような特徴がある。 実行順序を一方向に限定できる 実行結果を参照透過性を壊さずに取り出すことができる なの…

Maybe

先日([id:lethevert:20051119:p5])、↓のように書いたが、 悩んだのは(というか、いつも悩むのは)、例外処理をどうしようかということ。nextとprevはタプルで真偽値を返して、それ以外はabortにしたけれど、どうするのが使いやすいのだろう? こういうことをするために、Haskellでは、Maybeモナドがあるらしい。 Concurrent Cleanのライブラリには、StdLibにStdMaybe.dclを発見した。 :: Maybe x = Ju…

foldr

[id:lethevert:20051011:p1] で、よく分からないとかいたけれど、展開してみたら、分かった。 foldlは、確かに、計算量が増えることがある。

計算量について

HaskellやConcurrent Cleanは、他の言語だとかなり複雑に書く必要がある問題も非常に簡潔に書けるのはすごく利点なのだけれど、その反面、計算の実行過程が隠れているので、計算量の判断が自明でないことがあって、じっと考え込んでしまうことがある。 でも、もしかすると慣れなのかも知れない。もっと数をこなせば、直感的に判断できるようになるのかな?

samefringe problem

このまえ、考えるといっていたやつ。 http://practical-scheme.net/wiliki/wiliki.cgi?Shiro data Tree a = Leaf a | Branch [Tree a] fringe :: Tree a -> [a] fringe (Leaf x) = [x] fringe (Branch x) = foldr (\x r -> fringe x ++ r) [] x samefringe :: Eq a => Tree a -…

関数プログラミング

Lispの本を何気なく読んでいて、関数プログラミングの説明を読んでいて、なんか納得した。ということで、メモ。 関数プログラミング 副作用ではなく、返値を使って動作するプログラムを書くプログラミングパラダイム でも、これがそうなら、関数型という点では、MLとLispは同じ程度に関数型ということだよな。 それから、 int -> () という型は関数的でないし、関数の本体に複数の式があるのも関数的ではない。 そう思って、Concurrent Cleanの文法を見てみると、なるほど…

JVM Assembler

Java VMのバイトコードに対応したアセンブラはないかとちょっと調べてみる。Jasminというデファクトがあったらしいのだが、これはリンク切れで行方不明になっている。emacsのjasmin-mode.elは見つけたが、これがあっても本体がないなら意味ねー。 http://www.neilvandyke.org/jasmin-emacs/ Concurrent CleanのABCファイルをJVMコードに変換できれば、CleanをJVMで動かせるんでね?とか思ったのだけれど・…