Skip to content

Instantly share code, notes, and snippets.

View chuntaro's full-sized avatar

chuntaro

View GitHub Profile
@chuntaro
chuntaro / test-with-cache.el
Created July 9, 2023 11:00
Emacs で with-cache を実装してみた
;;; -*- lexical-binding: t; -*-
;; 括弧への異常な愛情 (https://www.slideshare.net/m2ym/common-lisp-9838434)
;; からの引用
(require 'cl-lib)
(defmacro with-cache (key &rest body)
(declare (indent 1))
(cl-once-only (key)
@chuntaro
chuntaro / optional-params.c
Created March 7, 2023 10:40
C 言語で型安全・個数安全なオプショナル引数を実現する
#include <stdio.h>
//----------------------------------------------------------------
#define INDEX_RSEQ() 4, 3, 2, 1, 0
#define VA_ARGS_SIZE_IMPL(ARG1, ARG2, ARG3, ARG4, N, ...) N
#define VA_ARGS_SIZE_AUX(...) VA_ARGS_SIZE_IMPL(__VA_ARGS__)
#define VA_ARGS_SIZE(...) VA_ARGS_SIZE_AUX(__VA_ARGS__, INDEX_RSEQ())
#define CONCATENATE_AUX(x, y) x##y
#define CONCATENATE(x, y) CONCATENATE_AUX(x, y)
@chuntaro
chuntaro / eaw.el
Created January 19, 2022 10:23
https://github.com/hamano/locale-eaw の eaw.el を少し修正
;;; eaw.el --- Fix east asian ambiguous width issue for emacs
;; Author: HAMANO Tsukasa <code@cuspy.org>
;; URL: https://github.com/hamano/locale-eaw
;; Version: 12
;; MIT License
;;; Code:
(defconst eaw-east-asian-ambiguous
[#x00A1 ; (1) Po INVERTED EXCLAMATION MARK
# Use colon separators.
xterm-24bit|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
@chuntaro
chuntaro / test-multiple-values.c
Last active December 15, 2021 09:41
C で多値を返す関数の実験コード
//
// C で多値を返す関数の実験コード
//
// Lisp -> C へのトランスレータを実装する時に多値をどう実装すればいいかを確認する実験コード
//
// 基本的に values() の呼び出しは values1 が呼ばれる
// 多値が必要な時は multiple-value-bind の第2引数で呼ばれた時のみで、
// レキシカルに判断出来るので、この方法で問題無い(はず…)
@chuntaro
chuntaro / fibs.el
Last active February 12, 2021 07:47
Emacs Lisp で実装する、9つのフィボナッチ関数
;;; -*- lexical-binding: t; -*-
;; Emacs Lisp で実装する、9つのフィボナッチ関数
;; 内訳は以下の通り
;;
;; 再帰呼び出し系
;; fib-tail-recursion
;; fib-double-recursion
;;
@chuntaro
chuntaro / vc-git-grep-quick.el
Created April 15, 2020 08:47
`vc-git-grep'はインタラクティブに実行するとファイル名等色々聞いてくるので、Enterだけで実行する為のラッパーコマンド
;; `vc-git-grep'はインタラクティブに実行するとファイル名等色々聞いてくるので
;; Enterだけで実行する為のラッパーコマンド
(defun vc-git-grep-quick (regexp &optional files dir)
(interactive
(progn
(grep-compute-defaults)
(let ((regexp (grep-read-regexp))
(files (concat "*." (file-name-extension (buffer-file-name))))
(dir "."))
@chuntaro
chuntaro / duplicate-removal.js
Created March 10, 2020 03:52
JavaScript で重複削除のテストコード
let array = [...Array(50)].map(_ => Math.floor(Math.random() * 20));
let a = array.filter(function (x, i, self) {
return self.indexOf(x) === i;
});
let b = Array.from(new Set(array));
console.log(a, b);
let loopCount = 1000000;
@chuntaro
chuntaro / test-dolist.el
Created March 9, 2020 09:22
dolist マクロの実装内容によって結果が違う例
(let (cs)
(dolist (x '(1 2 3 4 5))
(push #'(lambda () x) cs))
(mapcar #'funcall cs))
;;=> (5 4 3 2 1)
;; 展開後 (こんな感じになる)
(let ((ls '(1 2 3 4 5))
cs)
(while ls
@chuntaro
chuntaro / dolist.list
Created March 9, 2020 08:51
Xyzzy の dolist マクロ
(defmacro xyzzy-dolist ((var listform &optional (resultform ''nil)) &body body)
`(do* ((#1=#:tailvar ,listform (cdr #1#))
(,var (car #1#) (car #1#)))
((null #1#) ,resultform)
,@body))