Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

uLisp

uLispで動作中のS式を直接加工する

Common lispのヤバすぎる特徴として動いてる関数を直接加工できるというアレがあります。postd.ccこれを基礎にしてるuLispにも、同様の機能があります。 実際のところ こんな関数が動いていたとします。 (defun b (x) (pinmode 13 t) (digitalwrite 13 x) (d…

uLispでSDカードをつかう その1:準備と書き込み

実際のところ まず、 // Compile options // #define resetautorun #define printfreespace #define serialmonitor // #define printgcs // #define sdcardsupport // #define lisplibrary これの"#define sdcardsupport"を有効にします。 // Compile option…

uLispでWiFiにつなぐ

(wifi-connect "yourSSID" "yourPASS") 参考もと uLisp - Wi-Fi extensions uLisp - Wi-Fi examples

consp関数でリストの中身が空か確認する

listかどうかを判定する関数はlistpですが、 リストが空かどうかを判定するconsp関数もあります。 実際のところ (consp '(1 2)) ;; t (consp nil) ;; nil (consp '()) ;; nil 参考もと uLisp - Testing a result

macar関数

mapcar関数はリストに対し特定の命令を連続して実行して新しいリストを用意する関数です。 実際のところ (mapcar - '(4 5 6) '(1 2 3) ) ;; (3 3 3) 二つ目のリストを省略し、lambdaを使うことも 1213> (mapcar (lambda (x) (+ x 1)) '(1 2 3 4 5)) ;; (2 3 …

uLispのapply関数の中で">"や"<"を使うと……???

apply function Syntax: (apply function list)Returns the result of evaluating the function specified by the first argument with the list of arguments specified by the second parameter. 実際のところ (apply > '(0) ) ; t (apply > '(1) ) ; t (a…

uLispのsave-imageとload-image

実際のところ uLisp 2.7 1213> (defun myadd (val) (+ val 2)) myadd 1199> (myadd 23) 25 このmyaddを初期状態で含んだイメージとして保存しときます。 1199> (save-image) 25 ここでリセットを押すと……一旦消されるので、 先ほどの関数は無効になっていま…

uLispでUTF-8な文字を扱う

やってきたUTF-8な文字を取り扱います。 実際のところ 文字に変換 1213> (code-char 41) #\) 1213> (code-char 42) #\* 1213> (code-char #x41) #\A 数値からUTF-8へ 1213> (char-code #\A) 65 制御文字の置き換えも可能。 使える文字は Null, SOH, STX, ETX…

uLispまでビットシフト

実際のところ uLisp 2.7 1213> (ash 2 3) 16 後ろに倒すことも 1213> (ash 16 -3) 2 参考もと uLisp - Language reference

"read-from-string"で文字列をアトム/リストとして

Lispの強みといえば、S式です。 これをシリアル経由で取得できれば外部のつよつよデバイスで計算したS式を手元で受け取り評価という脳汁出る動きができます。 実際のところ 文字列で記述された要素を変数aにぶち込んでみます。 1213> (defvar a "(* 7 8)") a…

uLispの"let"と"let*"の違い

uLispの"let"と"let*"の違い 実際のところ letはローカル変数を定義する関数です。 ただ、uLispにおいては関数定義の外に結果を出す場合にもエラーを吐かれます。 (defun tst () (let ((a 7) (b a)) (print a) (print b))) 実行すると uLisp 2.7 1213> (defu…

subseq関数で文字列を切り出す

uLispの関数 文字列 実際のところ (subseq string start [end]) Lisp的に書くと…… (defun day (d) (subseq "MonTueWedThuFriSatSun" (* 3 d) (* 3 (1+ d)))) 実行するとこんな塩梅 uLisp 2.7 1213> (defun day (d) (subseq "MonTueWedThuFriSatSun" (* 3 d) …

Arduino UNO系でも動くLISP実装 uLISP その5:obnizでシリアル通信をうける

実際のところ obniz側 <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script> </head> <body> </body></html>

Arduino UNO系でも動くLISP実装 uLISP その4:obnizからシリアル通信を送る

実際のところ ポート的に限界があるため、Mega系列のシリアル2番を使いました。 obniz側 <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></meta></meta></head></html>

Arduino UNO系でも動くLISP実装 uLISP その3:シリアル通信をやる

お ま た せ。 シリアル通信をやります。 実際のところ シリアル通信はこんな構文 (with-serial (stream port [baud]) form*) というわけで……ストリームを"str"にいれて、Portは0番を使い、ボーレートは115200……のときは以下の通り。 (with-serial (str 0 1…

Arduino UNO系でも動くLISP実装 uLISP その2:Digital/Analog Pinを扱う

Arduinoの上で動いているので、DigitalやAnalogも使えます。 公式リファレンスによると以下のような関数があります。 Arduino interface millis, for-millis, with-i2c, restart-i2c, with-serial, with-spi, with-sd-card, pinmode, digitalread, digitalwr…

Arduino UNO系でも動くLISP実装 uLISP その1:説明と導入

Arduino UNO系でも動く軽いLISP実装として、 uLISPというのがあります。www.ulisp.com 暫定的目標として、これでロボットアームを動かせるようにしつつ obnizとのシリアル通信連動で遠隔制御できるようにまで持っていきたいと思います。 実際のところ なんと…