listibearp

lisp + stibear = predicate?

ECLビルド

お久しぶりです。ECLをMSVCでビルドしたときにてこずったのでメモとして。

MSVCの入手

Announcing Visual C++ Build Tools 2015 – standalone C++ tools for build environments | Visual C++ Team Blog

ECLのソースコードの入手

Index of /project/ecl/files

からcurrent-release.tgzをダウンロード。

ビルド前準備

ビルドする前にいくつかのファイルに修正が必要だった。

VS2015 build issues (#213) · Issues · Embeddable Common-Lisp / ECL · GitLab

ここにあるようにsrc/c/dpp.cmsvc/ecl/config.h.msvc6src/c/file.dを修正。さらに,

ECL (Embeddable Common-Lisp) 15.2.21をVisual Studio 2013でビルドした記録 - 新・日々録 by TRASH BOX@Eel

ここにあるようにsrc/c/main.dを修正。上で記載していないファイルについては修正が必要なかった。

そして,yasm(1.2.0)をPATHが通った場所においておけばよい。

ビルド

あとはMakefileを好きなように弄って,nmake & nmake installすればビルドが通ったっぽい。

ECL (Embeddable Common-Lisp) 16.1.2 (git:UNKNOWN)
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
Copyright (C) 2015 Daniel Kochmanski
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help.  Top level in: #<process TOP-LEVEL>.
>

追記

しかし(require "asdf")すらできない…

> (require "asdf")
;;; Loading #P"C:/Users/raebi/src/ecl-16.1.2/msvc/package/asdf.fas"

Condition of type: SIMPLE-ERROR
LOAD: Could not load file #P"C:/Users/raebi/src/ecl-16.1.2/msvc/package/asdf.fas" (Error: "この操作を正しく終了しました。
")
Available restarts:

1. (RESTART-TOPLEVEL) Go back to Top-Level REPL.

Broken at SI:BYTECODES. [Evaluation of: (REQUIRE "asdf")] In: #<process TOP-LEVEL>.
>>

Cygwinでpicrinを動かす

Picrinのビルドに必要なものを全て入れた状態でビルドすると,make installした後に

$ picrin
/usr/local/bin/picrin.exe: error while loading shared libraries: cygpicrin.dll:
cannot open shared object file: No such file or directory

と怒られてしまいます.

この方法が正しいのかは分かりませんが,PATHに/usr/local/libを追加してやることでpicrin.exeがcygpicrin.dllを見つけられるようになります.

EROSについて

Shibuya.lispテクニカル・トーク#8 でLTをしました。
上のスライドの通りですが,足りない部分を補足していきます。

集合論ベース

集合論ベース」というのは,クラスをとある特性を満たすオブジェクトの集合であると見なすということです.
この特性を表わすのが型に対する述語で,たとえばnumber?であったりstring?であったりのことです.
<number>クラスは,その特性関数を満たす,つまりnumber?が#tを返すようなオブジェクトの集合と考えます.

必要に応じてinclusion関係を付与可能

<number>クラスと<integer>クラスには包含関係があります.これをdefine-relationによって定義できるようにします.
そうすることで,より特定的なメソッドの順序を決定することができます.

利点

  • 実装が非常にミニマルで強力(メタクラスなどは必要なし)
  • クラスの概念がシンプルかつ自然(クラスが自分に属するオブジェクトを知っている)
  • クラス定義がシンプルになる(オブジェクトの構造はレコードに任せるため)

など.

ミニマルで理解しやすいのでいいですね.最高.

picrinのREPLを少し快適に(妥協案)

先日久々にPicrinを触ったところ,readlineSchemeで書き直されたようで,
historyを辿ったりといったことが出来なくなっていました。

それはあまりにも苦しいので,とりあえず現状の打開策としてGaucheの手法を真似てみることにしました。

Gaucheでは,
http://practical-scheme.net/gauche/man/gauche-refj_14.html
にあるように,scheme-program-nameに"gosh -i"をsetqしてやることでrun-schemeで起動できるようにしています。

これをそのまま真似してやって

(setq process-coding-system-alist
      (cons '("picrin" utf-8 . utf-8) process-coding-system-alist))
(setq scheme-program-name "picrin")
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)

あとはM-x run-schemeするだけでPicrinのreplがEmacsの側で使えます。勿論ヒストリ機能なども使えます。

いわゆるコミュ障の回避について

同級生が「一時的にでいいからコミュ力ブーストできたらなあ」みたいなことを言っていたので,それについて自分が思ったことを少し.

キャラを演じる

そもそも,私自身,自分をコミュ障だと自覚しているのですが,それなりに回避する方法を自分なりに考え,今まで対処してきました.

「猫を被る」という言葉がありますが,そこまでいかなくとも,私があまり親しくない人とコミュニケーションを取るときは「キャラを演じる」ということをしています.
特に,一時的な関係である場合,この手段は有効です.継続して今後も関係を維持していく必要があり場合,ずっとキャラを演じ続けることはかなり大変ですが,一時的にしか関係を持たず,以後もその関係を維持し深める必要がない場合,適当にその状況に応じたキャラを選択し,演じることで乗り切ることができます.

キャラをその場に応じて考え,作り出し,演じることは,慣れるまではなかなか難しいものでした.そこで,慣れるまでは,新たに一から作るのではなく,小説やドラマ,漫画などのフィクションからキャラを借りてきたり(余りキャラの立ったものはNG),身近な人のキャラを真似るとよいと思います.

敬語の感覚

ところで,私にとって目上の人などに対して敬語を使っているときも,同様の感覚があります.

敬語を使う状況は,基本的に自分と相手がある程度心理的距離がある,あるいは上下関係があったりなど比較的関係性がはっきりしてある場合が多く,演じるキャラがあまり複雑にならなかったりします.
そのため,よい練習の機会にもなるのではないかと思いました.

欠点

ただ,逆を返せば対等に近い関係性の場合,あまりこのメソッドは使いにくいため,キャラを工夫したり,別のメソッドを使うなどする必要があります.

まとめ

結局私がどう回避しているのか(しかも特定の状況において)を述べただけになりました.
ここまで考察しておきながら無責任にも,コミュニケーションはあまり考えすぎない方が上手くいくのかななんて思ったりもするのでした.

移行しました

今までTumblrでブログをやってきましたが,少し不便を感じるようになったのでHatena Blogに乗りかえることにしました.

というのも,Tumblrだとコメントが外部サービスになってしまうことや,(Gistを用いた)ソースコードの表示が面倒だったためです.
そのため,もともと低いブログ更新のモチベーションを更に下げることとなっていたため,乗りかえを決意しました.

なお,Tumblrの方は,興味深いと思ったドキュメントのメモ置き場として活用していくつもりです.