Common LISP에서 명령 줄 인수를 얻습니다
-
06-07-2019 - |
문제
Common LISP (Command Line Arguments) (특히 GNU에서)에서 명령 줄 인수를 얻을 수 있습니까?
해결책
CLISP로 스크립팅하고 있다고 가정합니다. 포함 된 파일을 만들 수 있습니다
#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)
실행하여 실행 가능하게 만듭니다
$ chmod 755 <filename>
실행하는 것은 제공합니다
$ ./<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 통찰력을 제공합니다
(defun my-command-line ()
(or
#+CLISP *args*
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))
당신이 찾고있는 것입니다.
CLISP 또는 GCL에 대해 이야기하고 있습니까? GCL에서 명령 줄 인수가 전달됩니다. si::*command-args*
.
SBCL에서는 SB-EXT를 사용하여 :* POSIX-ARGV*를 사용하여 Common LISP 스크립트에서 ArgV를 얻을 수 있습니다. sb-ext :* posix-argv*는 모든 인수를 보유하는 목록이며, 첫 번째 arg는 스크립트 파일 이름입니다.
각 구현에 대한 메커니즘을 추상화하는 언급 된 Clon 라이브러리가 있으며 이제는 더 간단합니다. 유닉스 -Opts, a 요리 책에 대한 튜토리얼.
(ql:quickload "unix-opts")
(opts:define-opts
(:name :help
:description "print this help text"
:short #\h
:long "help")
(:name :nb
:description "here we want a number argument"
:short #\n
:long "nb"
:arg-parser #'parse-integer) ;; <- takes an argument
(:name :info
:description "info"
:short #\i
:long "info"))
그런 다음 실제 구문 분석이 완료됩니다 (opts:get-opts)
, 옵션과 나머지 자유 인수의 두 가지 값을 반환합니다.
볼 수 있듯이 https://stackoverflow.com/a/1021843/31615, 각 구현에는 자체 메커니즘이 있습니다. 이것을 다루는 일반적인 방법은 통합 인터페이스를 제공하는 래퍼 라이브러리를 사용하는 것입니다.
이러한 라이브러리는 책을 읽는 것뿐만 아니라이를 변환하고 사용자에게 유용한 출력을 제공하는 데 도움이 될 수 있습니다. 아주 완전한 패키지는 클론입니다 (클론이나 클론과 혼동하지 말아야합니다) 명령 줄 옵션 Nuker, 또한 광범위한 문서를 제공합니다. 그러나 예를 들어, 당신의 요구가 더 가벼워 야한다면 다른 사람들이 있습니다. 명령 선과 그리고 신청 ARGV.
QuickLisp의 패키지는 이름이 지정되었습니다 net.didierverna.clon
, command-line-arguments
, 그리고 apply-argv
, 각각.