CommonLisp

例の問題

CLの練習で適当に書いた。いったい何を訴えたいのかよくわからないコードになった。 解き方はいたって普通。 (require :alexandria) (require :cl-ppcre) (defun perms (n xs list fn) (if (zerop n) (funcall fn list) (loop for x in xs do (perms (1- n) …

partial関数(マクロ)の続き

前回書いた partial マクロ利用例 (mapcar (partial #'args-rotate-right 1 #'make-list :initial-element 'X) '(1 2 3 4 5)) mapcar の第一引数をもう少し理解しやすい形にしたい。 そこで部分適用を段階的にしてみる。args-rotate-right 1 を部分適用した…

partial関数書いてみた

●partial関数 Common Lisp で *1 (defun partial (f &rest args) (lambda (&rest rest-args) (apply f (append args rest-args)))) (funcall (partial #'* 2) 10) ;=> 20 (funcall (partial #'list 1 2) 3 4 5) ;=> (1 2 3 4 5) 一応できてますね。左から順…

オーバーフローする flatten

エントリータイトル変更しました。 「オーバーフローしない」-->「オーバーフローする」 ●On Lisp の flatten はスタック溢れを起す (defun flatten-a (lis) (labels ((rec (x acc) (cond ((null x) acc) ((atom x) (cons x acc)) (t (rec (car x) (rec (cdr…