2010-09-17 12 views

cevap

2

Sanırım birkaç yol var. probe-file ardından bir dizin adı olduğunu ancak bir dosya adı olmadığını ve türü yapması gerektiğini belirlemek için döndürülen gerçek adı kontrol ederek. Örneğin. dizin için

+0

Çözümünüzü denerken, dosya veya dizin 'filespec 'olmadığında bu kodun bir hataya neden olacağını anladım. Ben daha az hata eğilimli kod için bir 've' kullanmanızı öneririm: '(ve (prob dosya filespec) (değil (pathname-isim (prob dosya filespec))))' – Sim

+1

Bu işe yaramaz. 'PROBE-FILE'ın dizinlerde çalıştığı net değil. Ayrıca 'pathname-name' 'dizinler için' NIL 'döndürdüğü de net değil. Genel olarak bu işlev, Common Lisp tarafından gerçekten sağlanmaz ve çoğu uygulama bunun için bir işleve sahiptir. Kütüphaneler taşınabilir isimler sağlar ... –

0

CLISP, bir dosyanın var olup olmadığını ve bir dizin olup olmadığını bildiren bir EXT:PROBE-DIRECTORY işlevine sahiptir.

Bu işlevin, standart ortak liste değil, CLISP'ye özgü olduğunu unutmayın.

+0

Üzgünüz, ama GNU Common Lisp ve GNU CLISP aynı mıdır? GNU Common Lisp (Windows'ta GCL 2.6.6) kullanıyorum ama söz konusu paketin “ext” dosyasını bulamadım. –

+0

@hyper: Hayır, GCL ve CLISP, Common Lisp dilinin iki farklı uygulamasıdır. Bu "clisp" yi etiketlediğinizden beri ikincisini kullandığınızı varsaydım. – sepp2k

+0

Clisp etiketini kaldırdı. Teşekkürler! –

1

CL-FAD, PATHNAME-AS-DIRECTORY ile birlikte kullanıldığında yol adı kanonlaştırır ve sizin için soruyorsun stimüle etmektedir ("/ yol/dir-olmadan-sondaki-eğik çizgi" gibi bir dize uzatırken başarısızlığı önler) bir işlevi DIRECTORY-EXISTS-P sahiptir.

(CL-FAD: REHBERİ-yol adı-P (CL-FAD: yol adı-AS-REHBERİ (PROBE-DOSYA "/ yol/eksik yırtmaç")))

+0

Bu GCL ile çalışacak gibi görünmüyor. En azından GCL "Desteklenen Lisp uygulamaları" altında listelenmiyor – sepp2k

+0

İyi haber şu ki, GCL yarım on yılı aşkın bir süredir piyasaya sürülmediğinden, nasıl yapacağınızı anlarsanız muhtemelen Yakında herhangi bir zamanda değişen hakkında endişeleniyorum! – Ken

+0

CL-FAD kaynak kodunu kontrol ettim - bu işlev sadece Allegro ve LispWorks için çalışıyor. –

4

bir portable pathname library yaklaşık bölümü okuyun Peter Seibel'in Practical Common Lisp kitabı. Ücretsiz olarak kullanılabilir. Dosya mevcut olduğunda bir pathname döndürecek veya yoksa, bir dosya-var-p-işlevi var. Bir dizin ise, iade edilen yol adı dizin biçiminde olacaktır. Ayrıca yol adını gerçekten dizin formunda olup olmadığını kontrol etmek için başka bir işlev verir.

Tüm kitap gerçekten okunmaya değer olduğundan, henüz yapmadıysanız kontrol edin.

+2

CL-FAD kütüphanesi *, genel kullanım için paketlenmiş olan * Peter Seibel'in bölümüdür. DIRECTORY-EXISTS-P işlevi, tam olarak tanımladığınız şeyi yapar. – Ken

+0

Bunu bilmiyordum. Bilgi için teşekkürler. – jondro

İlgili konular