更新: | 2017-05-09 |
---|---|
作者: | @voluntas |
バージョン: | 3.14 |
URL: | http://voluntas.github.io/ |
MQTT をググって調べた人向け
更新: | 2017-05-09 |
---|---|
作者: | @voluntas |
バージョン: | 3.14 |
URL: | http://voluntas.github.io/ |
MQTT をググって調べた人向け
#!r6rs | |
(library (port-pipe) | |
(export call-with-port-pipe) | |
(import (rnrs) (rnrs mutable-pairs) | |
(srfi :18)) | |
(define (make-queue) | |
(cons '() '())) | |
(define (queue-empty? queue) |
更新: | 2024-05-22 |
---|---|
作者: | @voluntas |
バージョン: | 2024.1 |
URL: | https://voluntas.github.io/ |
typo などは https://x.com/voluntas までご連絡ください。
;;; 無限再帰を止める方法 | |
(def foo (n) | |
(prn n) | |
(cl:sleep 1) | |
(foo (+ 1 n))) | |
(foo 0) | |
;>>> 0 |
(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)) |
;;; List Monad | |
(defmethod bind ((m list) f) | |
(apply #'append (mapcar f m))) | |
(defmethod fmap ((m list) f) | |
(mapcar f m)) |
(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))) |
(* | |
(* CR jfuruse: なんたら *) というのは前職でのコードレビューの書き方で、私の癖になっている。すべて、「私ならば…こうするかな?」が省略されています。 | |
私ならやっつけモードでこう書く、という例です。人様のコードを元にしているので、ほんとにこう書くのかよ?という突っ込みはありかと思います。 | |
元コードも実際のものを簡略化されたものだそうですので、私の提案コードのように書きたいけれども実は書けないんだ!ということもあるでしょう。 | |
OCaml のプログラミングスタイルは決まったものはなくいろいろと流儀があります。その一つと思ってください。 | |
*) |