更新: | 2024-05-22 |
---|---|
作者: | @voluntas |
バージョン: | 2024.1 |
URL: | https://voluntas.github.io/ |
typo などは https://x.com/voluntas までご連絡ください。
(* | |
(* CR jfuruse: なんたら *) というのは前職でのコードレビューの書き方で、私の癖になっている。すべて、「私ならば…こうするかな?」が省略されています。 | |
私ならやっつけモードでこう書く、という例です。人様のコードを元にしているので、ほんとにこう書くのかよ?という突っ込みはありかと思います。 | |
元コードも実際のものを簡略化されたものだそうですので、私の提案コードのように書きたいけれども実は書けないんだ!ということもあるでしょう。 | |
OCaml のプログラミングスタイルは決まったものはなくいろいろと流儀があります。その一つと思ってください。 | |
*) |
(in-package :cl-user) | |
(defstruct (hierarchical-package (:include sb-package:standard-package))) | |
(defmethod sb-package:find-package (package-designator (package hierarchical-package)) | |
(flet ((find-package-from-string (string) | |
(when (and (> (length string) 0) | |
(char= (elt string 0) #\.)) | |
(setq string (concatenate 'string (package-name package) string))) | |
(call-next-method string package))) |
;;; List Monad | |
(defmethod bind ((m list) f) | |
(apply #'append (mapcar f m))) | |
(defmethod fmap ((m list) f) | |
(mapcar f m)) |
(deftype octet () '(unsigned-byte 8)) | |
(defun read-le-uint (size in) | |
(loop FOR i FROM 0 BELOW size | |
SUM (ash (read-byte in) (* i 8)))) | |
(defun read-bytes (size in) | |
(let ((ary (make-array size :element-type 'octet))) | |
(read-sequence ary in) | |
ary)) |
;;; 無限再帰を止める方法 | |
(def foo (n) | |
(prn n) | |
(cl:sleep 1) | |
(foo (+ 1 n))) | |
(foo 0) | |
;>>> 0 |
更新: | 2024-05-22 |
---|---|
作者: | @voluntas |
バージョン: | 2024.1 |
URL: | https://voluntas.github.io/ |
typo などは https://x.com/voluntas までご連絡ください。
#!r6rs | |
(library (port-pipe) | |
(export call-with-port-pipe) | |
(import (rnrs) (rnrs mutable-pairs) | |
(srfi :18)) | |
(define (make-queue) | |
(cons '() '())) | |
(define (queue-empty? queue) |
更新: | 2017-05-09 |
---|---|
作者: | @voluntas |
バージョン: | 3.14 |
URL: | http://voluntas.github.io/ |
MQTT をググって調べた人向け