2010-09-17 22 views

Trả lời

2

Tôi nghĩ có một số cách. probe-file theo sau bằng cách kiểm tra tên thật đã trả về để xác định rằng nó có tên thư mục nhưng không phải tên tệp và loại sẽ làm. ví dụ. cho một thư mục

(pathname-name (probe-file filespec)) 

-> NIL 
+0

Trong khi thử giải pháp của bạn, tôi đã nhận ra rằng mã này sẽ dẫn đến lỗi trong trường hợp không có tệp hoặc thư mục 'filespec'. Tôi muốn đề nghị sử dụng một 'và' cho ít dễ bị lỗi mã:' (và (probe-file filespec) (không (tên đường dẫn-tên (thăm dò-file filespec)))) ' – Sim

+1

Điều đó sẽ không hoạt động. Nó không rõ ràng rằng 'PROBE-FILE' hoạt động trên các thư mục. Nó cũng không rõ ràng rằng 'pathname-name' trả về' NIL' cho các thư mục. Nói chung chức năng này là không thực sự được cung cấp bởi Common Lisp và hầu hết các triển khai có một chức năng cho điều đó. Thư viện cung cấp tên di động ... –

0

CLISP có chức năng EXT:PROBE-DIRECTORY, cho bạn biết tệp có tồn tại hay không và là một thư mục.

Lưu ý rằng chức năng này dành riêng cho CLISP và không phải là danh sách chung tiêu chuẩn.

+0

Xin lỗi nhưng GNU GNU Lisp và GNU CLISP giống nhau không? Tôi đang sử dụng GNU Common Lisp (GCL 2.6.6 trên Windows) nhưng tôi không thể tìm thấy gói nói "ext". –

+0

@hyper: Không, GCL và CLISP là hai cách triển khai khác nhau của ngôn ngữ Lisp chung. Vì bạn đã gắn thẻ 'clisp' này, tôi cho rằng bạn đang sử dụng thứ hai. – sepp2k

+0

Đã xóa thẻ clisp. Cảm ơn! –

1

CL-FAD có chức năng DIRECTORY-EXISTS-P, khi được sử dụng kết hợp với PATHNAME-AS-DIRECTORY canonicalizes tên đường dẫn (ngăn chặn thất bại khi giao một chuỗi như "/ path/dir-without-trailing-slash") và đạt được những gì bạn đang yêu cầu.

(CL-FAD: DIRECTORY-TÊN_ĐƯỜNG_DẪN-P (CL-FAD: TÊN_ĐƯỜNG_DẪN-AS-DIRECTORY (PROBE-FILE "/ path/missing-slash")))

+0

Có vẻ như điều này sẽ không hoạt động với GCL. Ít nhất GCL không được liệt kê trong "Triển khai Lisp được hỗ trợ" – sepp2k

+0

Tôi đoán tin tốt là vì GCL chưa có bản phát hành trong hơn nửa thập kỷ, nếu bạn tìm ra cách thực hiện ở đó, có thể bạn sẽ không phải lo lắng về nó thay đổi trên bạn bất cứ lúc nào sớm! – Ken

+0

Tôi đã kiểm tra mã nguồn của CL-FAD - chức năng này chỉ hoạt động với Allegro và LispWorks. –

4

đọc chương về một portable pathname library từ Cuốn sách Practical Common Lisp của Peter Seibel. Nó có sẵn miễn phí. Nó có một tập tin chức năng tồn tại-p sẽ trả về một tên đường dẫn khi tập tin tồn tại hoặc không nếu nó không. Đường dẫn trả về sẽ ở dạng thư mục nếu đó là một thư mục. Ông cũng đưa ra một chức năng khác để kiểm tra xem tên đường dẫn có thực sự ở dạng thư mục hay không.

BTW toàn bộ cuốn sách thực sự đáng đọc để kiểm tra xem bạn có chưa đọc hay không.

+2

Thư viện CL-FAD * là * chương của Peter Seibel, được đóng gói để sử dụng chung. Hàm DIRECTORY-EXISTS-P thực hiện chính xác những gì bạn mô tả. – Ken

+0

Tôi không biết điều đó. Cảm ơn bạn về thông tin. – jondro

Các vấn đề liên quan