Путь-каталог ведет себя странно

Я использую SBCL 1.1.4, и обнаружил, что pathname-directory ведет себя странно:

Скажем, что есть путь, содержащий "..", следующие примеры являются тривальными. SBCL преобразует каждое ".." в ":UP"

(pathname-directory "a/b/../")
(:RELATIVE "a" "b" :UP)

(pathname-directory "a/../b/../")
(:RELATIVE "a" :UP "b" :UP)

Проблема приходит здесь:

(pathname-directory "C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

(truename "C:/test/..")
#P"C:/test/../"

(pathname-directory (truename "C:/test/.."))
;;=> (:ABSOLUTE "test" "..")

(pathname-directory #P"C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

При вызове pathname-directory для возвращаемого значения truename, ".." не преобразуется в ":UP". (Имя "C:/test/..") также возвращает #P"C:/test/../", так почему же ".." не преобразуется?

1 ответ

Это похоже на проблему с SBCL в Windows. Truename of /a/b/.. должно быть /a/, Вместо этого, кажется, возвращается ссылка на .. сама запись.

В Linux это то, что вы получаете:

(truename "/etc/udev/..")
#P"/etc/"

Я бы сообщил об этом как об ошибке разработчикам SBCL.

Другие вопросы по тегам