見出し画像

Quil で関数型プログラミング:ともあれやってみよう

関数型プログラミングを学びたい!
できれば楽しく!

楽しくプログラミングを学ぶならクリエイティブ・コーディングですね。
「Quil」というものを使って関数型プログラミングでクリエイティブ・コーディングしてみましょう。

※ご注意
関数型にも Quil にも Clojure についてもド素人です。
故意にウソを書くことは誓ってありませんが、勘違いや理解不足による誤りが含まれているかもしれません。
いや、含まれています。含まれているに違いありません。

Quil とは

「Quil」とは、Clojure という言語でクリエイティブ・コーディングをすることができるライブラリです。
Clojure というのは Lisp系の関数型プログラミング言語です。

Java というプログラミング言語でクリエイティブ・コーディングをすることができる Processing を通してオブジェクト指向プログラミングを学ぶことができるように、Clojure というプログラミング言語を使った Quil を通して関数型プログラミングを学ぼうという寸法です。

Quil のサイトの不穏な絵のひとにやられてしまわないように頑張りたいと思います。

なにはともあれ、まずはやってみよう

Clojure についても関数型プログラミングについてもほとんど何も知らない状態ですが、まずはやってみましょう。

Clojure の開発では REPL(Read-Eval-Print-Loop) というツールとエディタを統合し、コードを書いては REPL で実行し、書いては実行しを繰返しながら開発していくというスタイルが一般的なようです。

…ゴクリ
し、しかしこれは環境構築にちょっと一苦労ありそうですね。

まずはお手軽に始められる Web ベースのサービスを使ってみましょう。
こちらのサイトにブラウザ上でコードを書いて実行までできる環境が整っています。

上部にあるメニューの「Create」をクリックすると、円が色を変えながら回転するアニメーションのサンプルコードが表示されます。
これはそのまま「Run」で実行、「Clear」で停止することが出来る完全なコードになっています。

これを元にいじっていけば勉強のとっかかりになりそうです。

できた!できたよ!

Quil の API はこちらにマニュアルがあります。

どうもこれらを使う際は q/関数 という書き方をするようです。

 (q/frame-rate 30)
 (q/color-mode :hsb)

これは Processing でいうところの

 frameRate(30);
 colorMode(HSB);

ですね!

じゃあ、まずは円に枠線が付いているのを消してみましょう。
Processing だと setup() に noStroke(); を入れたらいいですよね。
Quil だとこうかな?

 (q/no-stroke)

お!いけますね!

じゃ次、円が移動するんじゃなくて、塗りつぶしていくようにしてみましょう。
Processing の draw() にあたるところが

(defn draw-state [state]

ここなのかな?
この中に背景を描くのであろう background の記載があります。

(q/background 240)

これが動作しないようにすれば塗りつぶしになりますよね。
消してしまってもよいですが、ここはコメント化してみましょう。

 ;(q/background 240)

よ〜し、いい調子!
調子に乗って渦巻きを書いてみましょう。

フレームが進むにつれて中心から外側に動く円の半径を変えていけばよさそうですね。
Processing での frameCount は Quil では frame-count ですから、こうかな?

       x (* q/frame-count (q/cos angle))
       y (* q/frame-count (q/sin angle))]

あり?動かない…

どうやら、

q/frame-count

ではなく

(q/frame-count)

こう書かないと評価してくれないらしいです。
評価されることで始めて値が取れるということかな?

おー!できたー!

ま、最初はこんなもん

とまあ、なんだか全然関数型プログラミングに触れてないような…
でも最初の取っ掛かりはこんなもんですよね。

次回から本気出す!




この記事が面白かったらサポートしていただけませんか? ぜんざい好きな私に、ぜんざいをお腹いっぱい食べさせてほしい。あなたのことを想いながら食べるから、ぜんざいサポートお願いね 💕