Некоторый функциональный подход
(mapcar function (directory (merge-pathnames wildcard path)))
mapcar
- применяет function
к предоставленному списку аргументов, сгенерированных directory
. function
должен принимать только один аргумент.
Рабочий пример
61650326.lisp
;;;; File : 61650326.lisp
;;;; Modified : <2020-5-08 Fri 08:51:12 BST>
;;;; URL : https://stackoverflow.com/questions/61650326
(defparameter *user-path* "t/user/myfiles/")
(defparameter *wildcard* "*.txt")
(defparameter *function* 'type-of)
(defun map-on-files (path wildcard function)
"Map FUNCTION on a list of files found under PATH WILDCARD."
(mapcar function (directory (merge-pathnames wildcard path))))
(format t "~{~A~%~}" (map-on-files *user-path* *wildcard* *function*))
Создание файлов для целей тестирования:
~$: mkdir -p t/user/myfiles
~$: for i in $(seq 10); do mktemp -p t/user/myfiles/ --suffix=.txt; done
t/user/myfiles/tmp.S4wKkJ85sq.txt
t/user/myfiles/tmp.j3XeT2hneq.txt
t/user/myfiles/tmp.mut6GLhlaT.txt
t/user/myfiles/tmp.1l0I5oGDaR.txt
t/user/myfiles/tmp.hBpvOfarye.txt
t/user/myfiles/tmp.m1WfmZxrU8.txt
t/user/myfiles/tmp.o6QbvjXMh9.txt
t/user/myfiles/tmp.6CmPvWf7GO.txt
t/user/myfiles/tmp.ZNWcaymY0g.txt
t/user/myfiles/tmp.JfUQ4cW0dD.txt
И запустить фрагмент кода
~$: sbcl --script 61650326.lisp
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME
PATHNAME