Top

あちゃぴーの自転車通勤
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"))

S-expression

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

S-expression
Nyquist