kikkiiのブログ

ひきこもり

Common Lisp

2018年12月25日火曜日(クリスマス)

今日はクリスマス。キリストの誕生日。つれづれなるままなのでキリスト教の『聖書』でも読んでみようと思った。 新約聖書の『マタイによる福音書』を開き、第1章から読みはじめる。家系図の組み立てキットみたいな文章からはじまってハードル高い。第1章には…

common lispのハッシュテーブルは使いにくい

ハッシュテーブルという言葉を最初に見たとき、難しそうで私は怯えた。でも、ハッシュテーブルがkeyと値の対を詰め込む辞書マップのようなものだと分かったとき、使う分には「なんだそんなことか割と簡単だ」と思った。でも、common lispでハッシュテーブル…

Common Lispでリスト内包表記

リストを生成するとき、リスト内包表記(List comprehensions)で書けると可読性がよくなる。ロゼッタコードの当該部分を参考にしながらHaskell、Python、Clojure、そしてCommon Lispで内包表記を使ってみる。 Haskellでリスト内包表記: [(a,b,c) | a <- [1…

common lispで真理値表のようなもの

「命題」は英語ではpropositionと書く。数値が0のとき真の値を返す関数zeropとか、偶数かどうかを判定する関数evenpとか、奇数かとうかを判定する関数oddpとか、そういうcommon lispの関数名末尾のpは多分、propositionの頭文字pからきている。 命題は真か偽…

コメントをしまうマクロ

common lispで遊んでいるとき、型があった方が流れがわかりやすくなるから、いつの間にか、Haskellの記法を真似て関数の上にコメントとして書いていたりする。 ;; Number -> Number -> Number (defun add-xy (x y) (+ x y)) 「Numberは数値の型で、これはNum…

プログラミングわからない

私はこのくらいプログラミングがわからない。 (loop :while (not (= 0 (random 1000))) :do (print 'プログラミングわからない) 外れるたびに1回「プログラミングわからない」と吐き出さないとならない、当たる確率が1000分の1のくじ引きを当たるまでやり続…

(ql:quickload :let-plus)

Common Lispが気になる。いつか「自分Common Lisp」をつくりたい。let-plusは便利だと思った。 let-plusの紹介 — #:g1 効率がいいとか悪いとかそういうのはわからないが、この分配束縛系構文ライブラリを使ったら、ローカール変数やローカール関数わかりやす…

linesとsplit-sequenceで文字列を分割

Haskellでは、文字列の中の \n は改行。こういうことをすぐ忘れてしまう。 Prelude> :t lines lines :: String -> [String] -- linesは、改行のところで文字列を分割してリストにする関数 Prelude> lines "aa\nbb\ncc\ndd\nee\nff" ["aa","bb","cc","dd","ee…

(ql:quickload :arrow-macros :silent t)

Common Lispのライブラリをインストールするとき (ql:quickload :ライブラリ名) とすると To load "ライブラリ名": Load 1 ASDF system: alexandria ; Loading "ライブラリ名" とかって吐くので、それを黙らせるために (ql:quickload :ライブラリ名 :silent …

cl-replを使うためにお魚(fish)でパスしたという日記

qiita.com 上の記事を見て、よさそうだと思ったので、使ってみたくなり、 ros install koji-kojiro/cl-repl と端末で打ってみた。roswellは以前に入れておいたので、これは上手くいった。で、記事にあるように、 ros repl としてみた。「script "repl" does …

Common Lispで二分木・白黒木

昨日はHaskellで二分探索木の勉強をした。 kikkii.hatenablog.com Common Lispでもそれと同じようなことをしている人を見つけた。 qiita.com ありがたい。浅くしかコードを読んでいないが、コピー・アンド・ペーストして実行することで、溜飲を下げる。 (ql:…

クイックソート2

前にブログに貼り付けたクイックソートのコードをほんの少しだけ読みやすくしたい。内包表記の部分を書き換える。まずはhaskell。 -- 前 quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerSorted = quicksort [a | a <-…

クイックソート

HaskellとCommon Lispの勉強をコッソリ少しずつ進めている。Haskellでクイックソートが簡単に書けるのを知って嬉しい。このサイトのコードを貼り付ける。 -- haskell quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerS…