Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

common lisp

NumpyのCommon Lisp実装Numclがあるらしい

Pythonの(といいつつCで速度を稼いでいる)Numpyという数値計算用のライブラリがあり、広く使われているのは誰もが知るところだと思う。実際には、WebエンジニアからはPandasといったフレームワークを被せて使うことが多い。 そんな中、NumpyのCommon Lisp…

Scalaのfor-comprehensionのパチモンをCommon Lispで実装した(多値使って)

何言ってるんだという感じですがこういう感じです。 (defun find-user (username) (if (string= username "windymelt") (return-left :windymelt) (return-right "User Not Found"))) (defun check-passwd (user passwd) (if (and (eq user :windymelt) (str…

Common Lispで変数名に使える文字が自由すぎる

おおざっぱなタイトルすぎる。 Common LispやSchemeといったLisp族はきわめて構文の構造が簡素である,といったことはわざわざ説明の必要もないでしょう。リストとして式のASTを表現するわけです。 (defun foo (bar) (+ foo bar)) ; あらゆる構文がリスト 構…

Common LispでGPSを実装した + packageとpackage-inferred-systemまわりハマりどころ

初コーディングはCommon Lispでした。 さて、GPSというものがあります。地球を測位するやつではなく、General Problem Solverです。Generalという夢のような名前が付いていますが、このGPSは任意の形式化された記号問題を解くことができるらしいので遊んでみ…

Common LispのPackage-inferred-systemのサンプルリポジトリを公開した

github.com 作りました。 package-inferred-systemって何 簡単に言うと・・・ Common Lispではパッケージ名(言語上での名前空間)とモジュール(コンパイルする単位)とが分離しています 言い換えると,同じファイルにパッケージを複数入れる,といったことがで…

Common Lispでマサワダを生成します

wwsmawaa こんばんは。id:Windymeltです。「masawada Advent Calendar 2019」22日目です。昨日はid:kazuhi_raさんの『受肉するmasawadaさん - かずひらの日記』でした。ついに3Dモデルの領域を越えて現実にその姿を現わしたid:masawadaさん。彼はこの混沌とし…

dockerとかでqlot bundleを使うときはASDファイルもADDするべし

asdファイルもADDしていないとbundleしてくれないので注意しよう

AtCoder Beginner Contest 128にCommon Lispで参加した

競技プログラミングに初参加しました.実装言語はもちろんCommon Lispです. 残念なことにコンテスト開始からしばらくたってから気付いたので,B問までしか完成させられなかった.C問で頭をひねっていたら終了. 成績はこちら. atcoder.jp Common Lispはそ…

ついにanyenvでCommon Lispが!Roswellをanyenvでインストールできるようにするラッパーを書いた

書いた. github.com anyenvというのはおなじみナントカenv系のツール(xxenvと呼ぶことにする)をインストールすることができるツールで,rbenvとかplenvとかをインストールすることができるのだが,なんとCommon lispの処理系であるRoswellをインストールで…

(ご意見募集)Common LispのASDF3のここが気に入らない・難しい

最近感じたことを列挙したお気持ちエントリです.とくに結論もオチもないです.困っているという意識だけ共有して回りの反応を見たいというエントリなので,コメントははてブなどいただけると嬉しいです. ASDF難しい エラーメッセージがけっこうわかりにく…

Dockerではうまく処理系が切り変わらない?Common Lispの環境構築するときは処理系の統一に注意しよう

TL;DR Roswellで処理系を指定しても,Roswellでインストールしたコマンド類はそのコマンドをビルドしたときの処理系で実行される? シェルからコマンドを呼ばずにros runで実行するなどの手立てがある 例 Dockerで再現したがシェルで実験すると再現しないので…

Common Lispで文字列をキーにするのはあまりおすすめできない

まあ慣れかもしれないが,Common Lispで文字列をキーとした辞書,つまりalistやplistを作るとあまり使い勝手が良くないので避けたいと思うようになった. なぜなら標準的なリスト操作関数では比較をeqlで行うことが多い(要出展)ので,辞書構造を操作する際に…

任意のCommon Lisp(Roswell)スクリプトをAWS Lambda化するツール「Lambda-over-Lambda」の紹介

任意の.rosファイルを変換して,AWS Lambda Custom Runtimeが受け取る.zipに変換するツールができあがったので紹介と使い方のメモを兼ねてここに書いておく. 実際に動作するランタイムは,IPv6まわりのトラブルの影響でClozureCLを使っているが,今後余裕が…

AWS LambdaでCommon Lispの任意の関数を動かせるようにした

blog.3qe.us これでAWS Lambdaで動作するCommon Lispランタイムを実装したが,これを強化して,ハンドラを介してシステム内にある任意の関数を呼び出せるようにしたので紹介する. ハンドラに完全修飾した関数名を指定できる この機能もリポジトリに入れてあ…

(更新あり)AWS LambdaでCommon Lispを動かす

[追記]IPv6を無効化することによりうまく動作させることができました.詳細は記事下方を参照してください. いやー来ましたね.AWS Lambdaで新言語・・・あれ?? aws.amazon.com ナンダテメッコラー!!Lambdaの名前を冠しておきながらAWS LambdaでCommon L…

Smart::Argsのパーサを書いた

この記事は,はてなエンジニアAdvent Calendar 2018の17日目の記事です.昨日はid:aerealさんによるTheSchwartzの失敗したjobとかerrorがいつどのように消えていくのか - Sexually Knowingでした. 今日ははてなでもよく使われているSmart::Argsのパーサを書…

Smart::Argsパーサを書いている

2018年も終わろうとしているし平成ももうすぐ終わるのだが,いまだに俺の開発環境(emacs)ではperlをうまく補完することができない. とはいえdabbrevの類を使っているのでそこそこの補完は動いているのでそこはいいのだが,Smart::Argsの引数をよく間違えて…

Scala風に穴開き関数リテラルが書けるライブラリ「cl-punch」のご紹介

こういうのを作りました. github.com このライブラリを使うと,(lambda (x y z) (foo x y z)) と書いていたところを ^(foo _ _ _) と書けるようになります. ちなみに名前は穴が開いたパンチカードから来ています.任意の式に穴を開けられるのでそういう名…

シグナルを使って木構造をインタラクティブに探索する

prologのバックトラックのように,木構造といった構造を探索して,条件にマッチしたらsignalを飛ばして,その値を採用するか・採用せずに次の値を探すか,という決定を上にやってもらう,ということをやりたい場合はどうしたらよいのだろう. 試しに,木構造…

Common Lispでリードマクロしてみた

common lispではマクロによって式を変形することでプログラムを柔軟に書くことができる.今回はリードマクロを使って,便利なデバッグプリントを実装したい. 柔軟なマクロ,それがリードマクロ 定義方法が2種類あります 普通の関数をマクロの本体に仕上げて…

Dockerでqlotを使うときに必要なもの

qlotはライブラリを管理してくれる便利なやつだが,dockerで使うとなると忘れがちな点がいくつかあり,よくハマるのでメモしておく. qlfile まあこれは忘れないだろう.これがないとqlot installできないので,COPYする必要がある. # Dockerfile COPY qlfi…

Common Lispで直線と交点を描画する(lispbuilder-sdl)

交差するときは丸を表示する 交差しないときは表示しない こういうのを作った mf-atelier.sakura.ne.jp 上記サイトを参考にして,固定した線分と,一点がマウスで操作できる線分との交点を表示するコードを書いた. 図形描画ライブラリには lispbuilder-sdl …

openSuSE Tumbleweedでlemを動かす(ncursesトラブル)

lemを動かすのにちょっと苦労したのでメモ. TL;DR ros install cxxxr/lem vi ~/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-****/src/low-level/curses-bindings.lisp "libncursesw.so.6"を読み込んでいる箇所をコメントアウトし,libncur…

Common Lisp困りどころ その2: ClozureCLのファイルパスのエンコーディング

台風の風がするどい.実家の九州では珍しくもないことだが,関西でこれほどの風が吹くのは久しぶりだ. さて今回ClozureCLの日本語処理でハマったのでメモしておく. シチュエーション OSはFreeBSD 11.1 ファイルシステムはZFS 処理系はClozureCL 1.11(roswe…

Common Lisp困りどころ その1: `package-inferred-system`

Common Lispは良い言語だが,初心者が必ず陥る困りどころがいくつかあり,これで出鼻を挫かれるようなことがあってはいけないと思っている. そこで,この困りどころを提示することによって,よりよい解決方法や回避策がインターネットを通じて集ってくるの…

Linking emacs SLIME and docker-compose with SWANK server -- modern Common Lisp development

Better translation here: https://kvantos.github.io/#articles_en/emacs-slime/ Emacs works quite well with Common Lisp. We can use REPL and autocompletion feature connecting to new Common Lisp implementation or working implementation; SLIME …

SWANKサーバによるEmacs SLIMEとdocker-composeとの連携 -- 現代的なCommon Lisp開発

EmacsとCommon Lispとの相性は抜群に良い. SLIMEというプラグインを使うと,Emacs上でCommon Lisp処理系を立ち上げて接続したり,既に起動している処理系に接続したりすることで,REPLや補完を動作させられる.このEmacsとCommon Lisp処理系との接続は,処…

Common Lispで木構造の一部にパターンマッチさせてみた(optima)

パターンマッチングライブラリのoptimaで遊んでみた。ちょっと応用して入れ子になったリストの一部分にパターンがマッチするか検査する処理を書いてみた。将来的にはパースしたHTMLの部分マッチさせて抽出する処理に使ってみたい。 まずこういうリストがある…

PerlのScope::GuardをCommon Lispで実装するぞ!!!

tl;dr: 実装したけど限定的にしかうまく動かなかった。PerlのScope::Guardについて既に良く知っている人は、最後の節まで飛ばしてもよい。 Server::Starter読んでた サーバプロセスを起動するツールであるServer::Starterの内部がどうなっているのか知りたく…

Common LispのWebフレームワーク「Caveman2」のリクエスト処理を眺める

Common LispのWebフレームワークであるCaveman 2で遊んでいる. 今日は,リクエストの前後に処理を挿入し,レスポンスヘッダをいじったりしてみるお話. ある程度Common Lispが分かりますよ,というくらいのレベル感です.僕のレベルは,マクロが書けてうれ…

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?