Audacity Nyquist(Lisp言語) 四則演算
四則演算を試す
C言語などで関数を考える場合、引数と戻り値をイメージしていくが、Lispでは少々違う。
Nyquistでテスト
下記はCommon Lisp(clisp)とNyquist(print)でテストしてみた。
式 | 評価 Common Lisp | 評価 Nyquist | メモ |
(+ 1 2) | 3 | 3 | |
(+ 1 2 3) | 6 | 6 | |
(+ 1/3 1/3 1/3) | 1 | 無反応分数無理? | 分数計算得意 |
(+ 2/3 1/2) | 7/6 | 無反応分数無理? | |
(+ 0.3 0.3 0.3) | 0.90000004 | 0.900000 | Common誤差出る |
(- 2 1) | 1 | 1 | |
(- 3 2 1) | 0 | 0 | |
(* 2 3) | 6 | 6 | |
(* 2 3 4) | 24 | 24 | |
(/ 4 2) | 2 | 2 | |
(/ 4 2 2) | 1 | 1 | |
(/ 4 3) | 4/3 | 1 | 分数になる Nyquist? |
(/ 4 3.0) | 1.3333333 | 1.3333333 | 書き方で少数にできる |
(+(* 2 2)(* 2 3)) | 10 | 10 | |
(< 1 2) | T | 下記参照 | true |
(> 1 2) | NIL | 下記参照 | NIL |
(<= 1 2) | T | 下記参照 | true |
(>= 1 2) | NIL | 下記参照 | Null |
(= 1 1) | T | 下記参照 | true |
(/= 1 1) | NIL | 下記参照 | NIL |
(atom 1) | T | 無反応 | |
(atom 'Japan) | T | 無反応 | クオートでシンボル化 |
(rem 8 3) | 2 | 2 | 剰余 |
(expt 3.0 2) | 9.0 | 9.0 | 3^2 小数にすること |
(log 100 10) | 2 | 無反応 | |
(sqrt 2.0) | 1.4142135 | 1.414214 | 小数にすること |
(sqrt -1.0) | #C(0 1.0) | 無反応 | 複素数(実数 虚数) |
(sin 1.0) | 0.84147096 | 0.84147096 | ラジアン |
(1+ 2) | 3 | 3 | インクリメント |
(1- 2) | 1 | 1 | デクリメント |
(max 1 2 3 4) | 4 | 4 | |
(min 4 3 2 1) | 1 | 1 |
他にもいろいろ使える関数はある。 上記比較演算子の場合、Audacityでは以下のように書かないとポップアップには表示されない。 下記はifを使って条件分岐させている。 基本的な書き方はCommon Lispの書き方でおおむね通用する。
(if (= 3 3)(print "T")(print "NIL"))

記述内容は、以下のようになっている。
(if 条件式 真の場合に評価する式 偽の場合に評価する式)
3と3が同じかどうか比較し、同じであればT、違えばNILが表示される。
