Làm thế nào tôi có thể nhận được các đối số dòng lệnh trong (đặc biệt trong GNU, nếu có bất kỳ sự khác biệt nào) Common Lisp?Nhận đối số dòng lệnh trong Common Lisp
Trả lời
Tôi giả định rằng bạn đang viết kịch bản với CLisp. Bạn có thể tạo một tập tin có chứa
#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)
Làm cho nó thực thi bằng cách chạy
$ chmod 755 <filename>
Chạy nó mang lại cho
$ ./<filename>
NIL
$ ./<filename> a b c
("a" "b" "c")
$ ./<filename> "a b c" 1 2 3
("a b c" "1" "2" "3")
http://cl-cookbook.sourceforge.net/os.html cung cấp một số cái nhìn sâu sắc
(defun my-command-line()
(or
#+CLISP *args*
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))
là những gì bạn đang tìm kiếm, tôi nghĩ.
(hoặc FOO nil) tương đương với FOO, phải không? –
Có, nhưng khi bạn có FOO của bạn có điều kiện đọc, nó, có thể, tốt để có một mùa thu trở lại. Nhưng, sau đó, giá trị của (hoặc) là, không hoàn toàn đáng ngạc nhiên, NIL (giống như giá trị của (và) là T). – Vatine
Bạn đang nói về CLISP hoặc GCL? Có vẻ như trong GCL, các đối số dòng lệnh được truyền trong si::*command-args*
.
Trong SBCL, chúng ta có thể sử dụng sb-ext: * posix-argv * để lấy argv từ tập lệnh lisp chung. Sb-ext: * posix-argv * là một danh sách chứa tất cả các đối số, arg đầu tiên là filename script.
Tôi không chắc chắn công việc này nữa. Tôi nhận được thông báo lỗi' Biểu tượng 'POSIX-ARGV "không tìm thấy trong gói SB-EXT. ' – Langston
phải là sb-ext: * posix-argv *, trong văn bản cũ, \ * something \ * đã hoạt động như một kiểu. Tôi xin lỗi. –
Như đã thấy trong https://stackoverflow.com/a/1021843/31615, mỗi triển khai đều có cơ chế riêng. Cách thông thường để đối phó với điều này là sử dụng một thư viện bao bọc trình bày một giao diện thống nhất cho bạn.
Thư viện như vậy có thể cung cấp hỗ trợ thêm trong việc không chỉ đọc những thứ trong, mà còn chuyển đổi chúng và cung cấp đầu ra hữu ích cho người dùng. Một gói khá hoàn chỉnh là CLON (không bị nhầm lẫn với CLON hoặc CLON, xin lỗi), số Command Line Options Nuker, cũng cung cấp tài liệu mở rộng. Tuy nhiên, có những nhu cầu khác, nếu nhu cầu của bạn nhẹ hơn, ví dụ: command-line-arguments và apply-argv.
Các gói nhanh gọn cho các tên này được đặt tên theo thứ tự là net.didierverna.clon
, command-line-arguments
và apply-argv
.
liên kết trong bài đăng này không còn khả thi nữa. :( – masukomi
đây là siêu mát mẻ, nhưng làm thế nào tôi có thể làm cho dữ liệu từ các chuỗi? Chức năng của tôi được sử dụng để đầu vào như thế này (duy nhất '(abccdddef)) và nó không hoạt động với dây: O .. tôi đã cố gắng (mapcar # 'make-symbol * args *) nhưng điều đó dường như không thực hiện được công việc –