You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
let m = staccato (scat [c,d,e,c]|/2) |> ab |> b_ |> legato (d |> c)|*2 in stretch (1/8) m To transform music, we write a function. For example the following function halves all durations and transposes all pitches up a minor sixth: up m6 . compress 2 Applied to the above music we get: Input and output The Music Suite works well with the following input and output formats. MusicXML Lilypond ABC not
Haskell にはポイントフリースタイルというのがあります。 例えば foo x = f (g x) という中の x というのが「ポイント」と言うらしいです(型を明示していないから x の型が a->b だったりする可能性もあるけどその可能性は置いといて)。要するに値のことですね。 で、このポイントを除けてプログラミングするのをポイントフリースタイルと言います。 この場合、 foo = f.g となります。 ということで、ありとあらゆるコードをポイントフリースタイルで書けるように訓練しましょう。 基本的に、書いてれば慣れるのでどんどん書きましょう。 基本 基本的に (.) 関数を使います。 foo x = f (g x) foo x = (f.g) x foo = f.g です。 また、(.) は二項演算子なので、これを関数形式で書けば、 f.g = (.) f g となり、更に = (
公私ともにバタバタしていて、blog も twitter も放置していますが、どうにか生きてます。 anarchy golf - Function call expression に関して、youzさんが解説を書けと言ってるので、2位という立場で僭越ながら書いてみる。 2週間前に問題を見て、なんて好みの問題だろうと思い、誰も参加してないけど submit。 こういう処理系ちっくな問題のときはだいたい、Parsec で考えを整理してから実装してる。今回もまずParsec で下書き。 import Text.ParserCombinators.Parsec m @ main = getLine >>= putStrLn . either show id . parse expr "" >> m expr = do f <- char 'f' xs <- many $ do char '(' e
Haskell で Grass のインタプリタを書いてみました。以前から書いてみたいとは思っていたのですが、どこから手をつければいいものやら分からず、半年近く経ってしまいました。悲願達成。 Haskell 版は既に mr_konn さんが書いているので、目新しいものではありません。あくまでも自分のため。 とりあえず動くものはできたのですが、まだまだ改善の余地がありそう。悩んでいるのはこんなところです。 サンプルの「はいはいわろすわろす」を動かしたい(Shift_JIS とかでの出力もしたい)ので、UTF-8 モジュールは使っていません。そうすると自前で全角文字のハンドリングをする必要があります。UTF-8 なり Shift_JIS なり EUC-JP なり決め打ちで変換することになりそう(関数 filter')なのですが、もうちょいスマートなやり口はないものでしょうか。あと String
7割くらい書いたところで存在を忘れていました。 http://slashdot.jp/sp/binary2008/bin2008_shinh.shtml 何かに使えることがあるかもだから(無いと思うが) com2txt 書いとくかーと書いたのでした。オリジナルの com2txt は短すぎないか。 base64 よりはちょっとデコードしやすそうなフォーマットだとはいえ。ただうちでは動かんかったのだけど。 でまぁ com2txt だけじゃつまらないのでどうでもいいネタをしょぼしょぼしこんだのでした。 以下解答。 ruby hh.gif > hh_ruby.comとかで出てきたファイルは ASCII のみで表現された Happy Hacking! と出力する COM ファイル オリジナルの GIF ファイルを出力する Ruby スクリプト オリジナルの GIF ファイルを出力する Perl スク
Simon Peyton Jones [editor], Microsoft Research, Cambridge Lennart Augustsson, Sandburst Corporation Dave Barton, Intermetrics Brian Boutel, Victoria University of Wellington Warren Burton, Simon Fraser University Joseph Fasel, Los Alamos National Laboratory Kevin Hammond, University of St. Andrews Ralf Hinze, University of Bonn Paul Hudak, Yale University John Hughes, Chalmers University of Techn
http://d.hatena.ne.jp/ranha/20080709/1215658800 まぁ少なくとも片方は #define 使う必要ないですよね。 #define _ X import Prelude hiding((<),(/)) data X = X a / b = X a < b = putStrLn $ "Hidamari Sketch 365 " ++ b main = X / _ / X < "Please see next week!" #define 使ったら負けかなとは思うんですが、_ はどうなんでしょう…。パースエラー出ない場所が限られてますしねぇ。 追記 Haskell で日本語を使うには: http://ja.doukaku.org/comment/3513/ , http://hackage.haskell.org/cgi-bin/hackage-scr
Haskell の SDL binding である HSDL を GHC 6.6.1 でコンパイルするための手順メモです。 1. 必要なものをダウンロードします。 HSDL のソースコード、SDL のランタイムライブラリと開発ライブラリ (ヘッダとか) が必要です。 http://fxp.hp.infoseek.co.jp/haskell/HSDL/ から HSDL-0.2.0.zip と haSDLis.zip http://www.libsdl.org/ から SDL-1.2.12-win32.zip と SDL-devel-1.2.12-mingw32.tar.gz $ ls HSDL-0.2.0.zip SDL-devel-1.2.12-mingw32.tar.gz SDL-1.2.12-win32.zip haSDLis.zip 2. SDL の開発ライブラリを適当なところに展開
状態をモナドで実現する方法を考えます。 リスト 例は簡単な方がいいので、データ構造として Lisp 風のリストを定義しましょう。 data List a = Nil | Cons a (List a) deriving Show リストは、こんな風に表せます。 Cons "c" (Cons "b" (Cons "a" Nil)) Lisp 風の cons も定義してみましょう。 cons :: a -> List a -> List a cons x xs = Cons x xs cons "c" $ cons "b" $ cons "a" Nil → Cons "c" (Cons "b" (Cons "a" Nil)) 状態を持つリスト さて、この Lisp 風のリストに、要素の数を覚えさせておきたいとしましょう。もちろん、数えれば分りますが、数えなくても一瞬で分るようにしたいのです。
なるほどなと思った A Neighborhood of Infinity: MSFP 2008 より HaskellでのListデータ型の定義 data List A = Nil | Cons A (List A) 各項を以下の数式記号に、置き換える List A => L(A) a | b => a + b Nil => 1 Cons A b => A × b L(A) = 1 + A × L(A)L(A)を左辺へまとめる (1 - A) × L(A) = 1係数で割る L(A) = 1 / (1 - A)テイラー展開する テイラー展開 - Wikipediaの幾何級数 L(A) = 1 + A + A^2 + A^3 + ...各項は、 A = A × 1 A^2 = A × A × 1 A^3 = A × A × A × 1 L(A) = 1 + A × 1 + A × A × 1
しょぼい組み込みHW屋の私が現実逃避のため関数型言語の勉強を始めました.それはそうと,VdGG観てきました.peter hammillが神すぎて困りました.次も観るぞ! Haskellのlist comprehensionっぽい何かをCommonLisp(xyzzy上)で実現してみました.hugsで深追いしていった結果,なんとなーくその裏の実装の見当がついたので,まぁモノはためしにやってみようかと. まず,こんなのを, [x | x <- [1,2,3,4,5], x < 3] CommonLispで実装すると,こんな感じ. (let ((x '(1 2 3 4 5))) (mapcar #'(lambda (x) x) (remove-if-not #'(lambda (x) (< x 3)) x))) Haskellのgeneratorはまずletに置き換えました.letはこの場合別に
IT 戦記で Haskell のリストを JavaScript で書くというのをやっている。これは面白い。ただ、そのまま書くと無限リストが無限再起に陥ってしまうので、遅延評価を行わなくてはいけない。 関数式を使った遅延評価 JavaScript で遅延評価を行うにはどうすればいいか。その答えのひとつが関数式だ。リストの各セルを、先頭の値と後続のリストという構造ではなく、先頭の値と後続のリストを返す関数という構造にしてやれば、リストの最初のセルを評価した時点で残りのセルがすべて評価されるという事態を防げる。 具体的には、リスト構築の際、後続のリストそのものの代わりにリストを返す関数を渡し、後続のリストを得るときは関数呼び出しを伴うようにすればよい。なお、ここでは空リストを表現するのに nil という特殊な値を用いる。nil は先頭の値も後続のリストも nil 自身であるリストである。 var
オープンソースソリューションを扱う技術系企業 タイムインターメディア(以下TIM)が、「HOPプロジェクト」を開始した。HOPとは、Higher-Order Programming=高階プログラミングを略した言葉。HOPプロジェクトは、TIMの高階プログラミングにおける技術力を背景に、技術コンサルなどを行っていくプロジェクトだ。 そもそも高階プログラミングとは何なのか? まず、具体的に使用するツールは、関数型言語と呼ばれる「Haskell」や、「Gauche」、そしてGaucheを使って作られたアプリケーションサーバフレームワークの「Kahua」となる。HOPプロジェクトの推進役であるTIM 山下伸夫氏に、高階プログラミングとは何か? を聞いた。 山下伸夫氏(以下山下氏) Webサービスも何でもそうですが、スクラッチから組むことはありません。フレームワークを使うわけですが、そのフレームワー
Introduction A while ago, after what now seems like eternity of flirting with Haskell articles and papers, I finally crossed the boundary between theory and practice and downloaded a Haskell compiler. I decided to do a field evaluation of the language by two means. I was going to solve a problem in a domain that Haskell is known to excel at followed by a real world problem1 that hasn't had much ex
unlambda から brainfuck への変換器を作ろうしていましたが、なぜか de Bruijn index のラムダ式の評価器を Haskell で作った時点で飽きました。そんな残骸ですが、メモ代わりに公開します。de Bruijn index でも代入の定義はやっぱり複雑なんですね。 de Bruijn index はラムダ式の記法の一種です。普通のラムダ式と違うのは、変数を文字列ではなく数字で表現するところです。その数字のある位置から左方向にλを数えていって、その数字番目のλで束縛された変数を指示します。例えば λx.x は λ 1 になり、λx.λy.x は λ λ 2 に、λf.λg.λx.f x (g x) は λ λ λ 3 1 (2 1) になります。詳しくは wikipedia:de Bruijn index を参照してください。 -- ラムダ式 (出力機能付き)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く