Bye Bye Moore

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

【読書メモ】 最初のペンギン ストーリーでわかる! らくらく外国語習得術

最初のペンギン ストーリーでわかる! らくらく外国語習得術

最初のペンギン ストーリーでわかる! らくらく外国語習得術

タイトルは初見だと自己啓発風ですが、実際には言語学の本です。

エスニック料理店や出先での対話形式という体で、言語学トークをするという構成になっています。

どんな言語でも100時間ほどである程度構造を理解できるようになるフレームワークも紹介されています。
もっとも、著者のお二人は言語学者というより、趣味と実益を兼ねて多言語習得をした商社系の方々なので
必ずしも学術的な裏付けがあるわけではないのですが……そういう方がいいケースっていうのもありますよね。

このブログで度々言及しているヨーロッパ言語共通参照枠(CEF)についてはあまり言及がありませんでした。
100時間でどのレベルか分かると、少し嬉しかったかも……。
例文を見る限り、B1「習得しつつある者・中級者」とかそれくらいのようには見えました。
本家の基準だと300時間ほどとなっているので、必ずしも一致はしないかもしれませんが……。
shuzo-kino.hateblo.jp

【読書メモ】言語学の考え方

中公新書から出ている、言語学入門の本です。
黒田龍之介先生の別の本を読んだので、もうちょっと素人よりの本紙を見て見ました。

諸外国語から日本語、さらに漢文の事例を使って言語というものを考えていくスタイルです。
知らない言葉が結構でてきて面白かったです(小学生並みの感想)

「全然」が明治時代には肯定語と一緒に使われていた事例をあげて、
最近の「全然」は否定と繋げなくてはならないという風潮を指摘する部分が
そこかはとなくパオロ・マッツァーリノ氏の「誰も調べなかった日本文化史」を彷彿とさせました。
shuzo-kino.hateblo.jp

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

Lispの強みといえば、S式です。
これをシリアル経由で取得できれば外部のつよつよデバイスで計算したS式を手元で受け取り評価という脳汁出る動きができます。

実際のところ

文字列で記述された要素を変数aにぶち込んでみます。

1213> (defvar a "(* 7 8)")
a

これをprintしてもevalしても……当然、文字列として扱われます。

1205> (print a)

"(* 7 8)" 
"(* 7 8)"
1205> (eval a)
"(* 7 8)"


ここで、read-from-stringを介すと……
文字列がS式と解釈されます。

1205> (print (read-from-string a))

(* 7 8) 
(* 7 8)


1205> (eval (read-from-string a))
56

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

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

実際のところ

letはローカル変数を定義する関数です。
ただ、uLispにおいては関数定義の外に結果を出す場合にもエラーを吐かれます。

(defun tst ()
  (let ((a 7)
        (b a))
    (print a) (print b)))

実行すると

uLisp 2.7 
1213> (defun tst ()   (let ((a 7)         (b a))     (print a) (print b)))
tst

1187> (tst)
Error: 'a' undefined

こういう場合は"let*"を使い、事前に定義済みの変数を参照できるようにします。

(defun tst (a)
  (let *((a 7)
        (b a))
    (print a) (print b)))
1186> (defun tst ()   (let* ((a 7)         (b a))     (print a) (print b)))
tst

1187> (tst)

7 
7 
7

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) (* 3 (1+ d))))
day

1175> (day 2)
"Wed"

1175> (day 1)
"Tue"

Puthonで書くと、こんな感じの記述ですかね……。

"MonTueWedThuFriSatSun"[3:6]
'Tue'