书籍下载地址:
LISP指令速查网站推荐:
Simplified Common Lisp reference (jtra.cz)
由于Common LISP命令很多,经常忘,所以做个这个表格,方便速查。
表格中命令的顺序基本为ANSI Common LISP这本书中命令出现的顺序。
| 命令 | 含义 | 例子 |
|---|---|---|
| T | 真 | |
| NIL | 假 | |
| +-*/ | 加减乘除 | > (+ 2 3 4) 9 |
| 1+ | (1+ n) 相当于 (+ n 1) | |
| 1- | (1- n) 相当于 (- n 1) | |
| >和< | 大于和小于 | > (> 2 1) T |
| CHAR< 和 CHAR> | 字符比较 | |
| ** | 全局变量需要左右加上星号 | > (setf *print-array* t) T |
| ZEROP | 为0时返回真 | |
| ACTERP | 是否为字符 | |
| /= | 不相等 | |
| = | 判断相等(建议到这个网站查看具体解释)。仅能判断数字。 | > (= 4 4.0) T |
| EQ | 是否完全相同。内容相同但是内存位置不同也为不同。不用于数字。 | > (eq (cons 'a 'b) (cons 'a 'b)) NIL > (eq 'a 'a) T |
| EQL | 与EQ相似。可以比较数字。 | |
| EQUAL | 是否内容相同。内存位置可以不同。字符串大小写敏感 | > (equal (list 1 (cons 2 3)) (list 1 (cons 2 (+ 2 1)))) T |
| EQUALP | 字符串大小写不敏感 | |
| AND OR NOT | 逻辑与、或、非 | |
| ODDP | 是否为奇数 | |
| EVENP | 是否为偶数 | |
| QUOTE(`) | 不求值 | > `(+ 1 2) (+ 1 2) |
| CONS | 构建一个长度为2的列表 (但第二个输入值可以是一个列表) |
> (cons 'a '(b c d)) (A B C D) |
| CONSP | 判断是否为CONS | |
| LIST | 构建一个列表 | (list 1 2 3) |
| GETF | 获取列表的键值 | (getf (list :a 1 :b 2 :c 3) :a) ;;如果没有该值,返回NIL |
| CAR | 获取列表第一个元素 | |
| CDR | 获取列表第二个以及 之后的元素构成的列表 |
|
| THIRD | 获取列表第三个元素 | |
| LISTP | 判断输入是否为列表 | |
| NULL | 判断是否为空表或NIL | |
| IF | 相当于c语言的aaa?xxx:yyy | |
| DEFUN | 声明全局函数 (defun name (parameter*)) "Optional documentation string." body-form*) |
(defun our-third (x) (car (cdr (cdr x)))) 调用时:(our-third (1 2 3)) |
| (DEFUN的参数列表 | ||
| &rest | 剩余的参数。会被包装为列表。 | (defun our-funcall (fn &rest args) (apply fn args)) |
| &optional | 可选参数 | (defun philosoph (thing &optional (property 'fun)) (list thing 'is property)) |
| &key | 关键字参数 | > (defun keylist (a &key x y z) (list a x y z)) KEYLIST > (keylist 1 :y 2) (1 NIL 2 NIL) |
| ) | ||
| EQL | 相等判断 | |
| FORMAT | 输出 | > (format t "~A plus ~A equals ~A. ~%" 2 3 (+ 2 3)) 2 PLUS 3 EQUALS 5 NIL |
| ~A | 数据输出的位置,相当于C语言的%d | |
| ~% | 换行符 | |
| READ | 输入 | > let ((val (read)) |
| LET | 定义局部变量 | > (let ((x 1) (y 2)) (+ x y)) 3 |
| DEFPARAMETER | 创建全局变量(变量需要加星号) | > (defparameter *glob* 99) |
| DEFCONSTANT | 定义全局常量(不需要星号) | |
| BOUNDP | 判断是否为全局变量或常量 | > (boundp '*glob*) T |
| DEFVAR | 定义全局变量 | (defvar *db* NIL) |
| SETQ | 赋值 | |
| SETF | 赋值(可给全局或局部变量),可以创建全局变量。 可以给数组的某个值赋值,而setq不行。 |
> (let ((a '(1 2 3 4))) (setf (third a) 'new-value) a) (1 2 NEW-VALUE 4) |
| SET | 赋值。用于设置符号 | (set 'foo '(1 2 3)) |
| INCF | 自加。不加参数时相当于c的++。也可以参数相当于+= | |
| REMOVE | 返回不包含这个对象的新列表,但不改变原列表 | > (setf lst '(c a r a t)) (C A R A T) > (remove 'a lst) (C R T) |
| DELETE | REMOVE的破坏性版本。但不能保证所需移除的元素都能移除。 | > (setf lst '(a r a b i a) ) (A R A B I A) > (delete 'a lst ) (R B I) > lst (A R B I) |
| DO | 循环 (DO (变量定义) (结束条件 返回值) 循环主体) 其中变量定义为(变量名 变量初值 (变量变化语句)) |
(defun show-squares (start end) (do ((i start (+ i 1))) ((> i end) 'done) (format t "~A A%" i (* i i)))) |
| DOTIMES | 循环次数 | (dotimes (x 5 x) (format t "~A " x)) 0 1 2 3 4 5;; 第一行第二个x是返回值,可以不加 |
| LOOP | 循环宏 | > (loop for x from 0 to 9 do (princ x)) 0123456789 NIL > (loop for x = 8 then (/ x 2) until (< x 1) do (princ x)) 8421 NIL |
| (defun sumx (n) (loop for x from 1 to n sum x));;返回从1加到n的结果 |
||
| > (loop for x from 1 to 5 collect (random 10)) (3 8 6 5 0) |
||
| (defun even/odd (ns) (loop for n in ns if (evenp n) collect n into evens else collect n into odds finally (return (values evens odds)))) > (even/odd '(1 2 3 4)) (2 4) (1 3) |
||
| (loop for i below 10 and a=0 then b and b=1 then (+ b a) finally (return a));;计算第11个斐波那契数 |
||
| PROGN | 接受任意数量的表达式,依序对它们求值,并返回最后一个值。 | |
| DOLIST | for each... | > (dolist (obj lst) 相当于C++的for(auto obj:lst){,相当于Python的for obj in lst: |
| FUNCTION(#') | 把函数当做实参传入 | |
| APPLY | 接受函数和实参列表,并返回把传入函数应用在后面实参的结果 | > (apply #'+ '(1 2 3)) 6 |
| FUNCALL | 功能和APPLY相同,但实参不需要包装成列表。 | > (funcall #'+ 1 2 3) 6 |
| LAMBDA | Lambda表达式 | (lambda (x y) (+ x y)) > (funcall #'(lambda (x) (+ x 100)) 1) |
| TYPEP | 判断是否为某种类型 | > (typep 27 'integer) T |
| COPY-LIST | 返回列表的复制 | |
| ATOM | 验证一个项是否为原子(即列表的一个项) | |
| APPEND | 返回列表串接 | > (append '(a b) '(c d) 'e) (A B C D E) |
| NCONC | 返回列表串接并更新第一个列表的最后一个 cons 单元的 next 指针。 | > (let ((l1 (list 1 2 3)) (l2 (list 4 5 6))) (nconc l1 l2) l1) (1 2 3 4 5 6) |
| NTH | 通过索引获取列表元素 | > (nth 0 '(a b c)) A |
| NTHCDR | 找到第n个CDR | > (nthcdr 2 `(a b c d e)) (C D E) |
| LAST | 返回列表最后一个CONS对象 | > (last '(a b c)) (C) |
| LAST的CAR | 返回列表的最后一个元素 | > (car (last '(a b c))) C |
| SECOND | 返回第二个元素 | |
| CADR | 返回第二个元素(相当于CDR的CAR) | |
| CADDR | 返回第三个元素(相当于CDR的CDR的CAR)可以无限加D。 | |
| MAPCAR | 返回把函数应用到列表每个元素的结果 | > (mapcar #'(lambda (x) (+ x 10)) '(1 2 3)) (11 12 13) |
| MAPCAN | 类似MAPCAR。但它返回值是用NCONC拼接在一起的。 | |
| MAPC | 把函数应用到列表每个元素,返回原来的列表 | |
| MAP | 把函数应用到列表每个元素,可定义返回的类型。 | (map 'list (lambda (x) (+ x 10)) '(1 2 3 4)) (11 12 13 14) |
| MAP-INTO | 把函数应用到列表每个元素,第一个参数不是一个序列类型,而是用来存储结果的。 | > (let ((a (list 1 2 3 4))) (map-into a #'* a a) a) (1 4 9 16) 还可以:(setf v (map-into v #'1+ v)) |
| MAPLIST | 将列表的渐进的下一个 CDR传入函数 | > (maplist #'(lambda (x) x) '(a b c)) ((A B C) (B C) (C)) |
| MEMBER | 判断元素是否为列表的成员。可以传入参数:TEST和:KEY | > (member 'b '(a b c)) (B C) > (member '(a) '((a) (z)) :test #'equal) ((A) (Z)) > (member 'a '((a b) (c d)) :key #'car) ((A B) (C D)) ;;在这个例子里,我们询问是否有一个元素的CAR是 a |
| MEMBER-IF | 返回由满足条件的元素构成的列表 | > (member-if #'oddp '(2 3 4)) (3 4) |
| ADJOIN | 如果对象还不是列表的,成员,构建对象至列表上 | > (adjoin 'b '(a b c)) (A B C) > (adjoin 'z '(a b c)) (Z A B C) |
| UNION | 并集 | |
| INTERSECTION | 交集 | |
| SET-DIFFERENCE | 补集 | > (set-difference '(a b c d e) '(b e)) (A C D) |
| LENGTH | 返回元素的数目 | |
| SUBSEQ | 获取列表的一部分,相当于其他语言的Slice | > (subseq '(a b c d) 1 2) (B) >(subseq '(a b c d) 1) (B C D) |
| REVERSE | 列表反转 | |
| NREVERSE | 使原列表反转? | |
| EVERY | 判断列表每个元素都满足条件 | > (every #'oddp '(1 3 5)) T |
| SOME | 判断列表部分元素满足条件 | > (some #'evenp '(1 2 3)) T |
| PUSH | 把元素插入列表的前端 | (push atom list) |
| POP | 移除列表的第一个元素,并返回这个元素 | |
| ASSOC | 返回列表中CAR为指定元素的列表 | > (setf min '((a b c) (b c) (c d))) > (cdr (assoc 'a min)) (B C) |
| MAKE-ARRAY | 构造数组 | > (setf arr (make-array '(2 3) :initial-element nil)) ;;构造了一个2x3的数组 |
| AREF | 通过索引获取数组元素 | > (setf (aref arr 0 0) 'b) B> (aref arr 0 0) B |
| #na | 表示字面常量的数组,其中n是数组的维度 | #2a((b nil nil) (nil nil nil)) |
| VECTOR | 向量 | > (vector "a" 'b 3) |
| VECTOR-PUSH | 把元素插入向量的前端 | |
| VECTOR-POP | 移除向量的第一个元素,并返回这个元素 | |
| SVREF | 通过索引获取向量元素 | |
| WRITE-TO-STRING | 数字转字符串 | |
| SORT | 字符串排序 | > (sort "elbow" #'char<) "below" |
| CHAR | 通过索引获取字符串元素 | (char string pos) |
| COPY-SEQ | 返回序列(字符串)的复制 | |
| CONCATENATE | 连接 | > (concatenate 'string "not " "to worry") "not to worry" |
| TAILP | 如果第一个列表是第二个列表的一部分,则返回T | |
| ELT | 通过索引获取任何种类的序列元素。针对特定类型的序列,特定的存取函数会比较快,所以使用 elt 是没有意义的,除非在代码当中,有需要支持通用序列的地方。 | |
| POSITION | 返回序列中一个元素的位置,未找到元素时返回 nil。参数:start :end :test | > (position #\a "fantasia") 1> (position #\a "fantasia" :start 3 :end 5) 4 > (position 3 '(1 0 7 5) :test #'<) 2 |
| SUBSEQ | 获取子串(SUBSEQ STR P1 P2) | |
| POSITION-IF | 返回第一个满足此函数的元素 | > (position-if #'oddp '(2 3 4 5)) 1 |
| FIND | 返回要寻找的对象 | > (find #\a "cat") #\a |
| FIND-IF | 返回要寻找的满足函数的对象 | > (find-if #'characterp "ham") #\h |
| REMOVE-DUPLICATES | 仅保留序列中每个元素的最后一次出现。 | |
| REDUCE | 把序列压缩成一个值 | (reduce #'fn '(a b c d))等同于(fn (fn (fn 'a 'b) 'c) 'd) |
| DEFSTRUCT | 定义结构体 | (defstruct point x y) |
| MAKE-HASH-TABL | 创建哈希表,无需参数。 | > (setf ht (make-hash-table)) |
| GETHASH | 获取一个键值 | > (setf (gethash 'color ht) 'red) RED |
| REMHASH | 从一个哈希表中移除一个词条,若返回T,说明有词条被移除 | |
| BLOCK | 块 | |
| RETURN-FROM | 返回块或函数 | > (block head (format t "Here we go.") (return-from head 'idea) (format t "We'll never see this.")) Here we go. IDEA |
| RETURN | 返回 | |
| TAGBODY | ||
| GO | 相当于其他语言的goto。需要在TAGBODY下使用 | > (tagbody (setf x 0) top (setf x (+ x 1)) (format t "~A " x) (if (< x 10) (go top))) 1 2 3 4 5 6 7 8 9 10 NIL |
| LET* | 相当于嵌套版本的LET,可以依赖一个表达式设立另一个变量。可以把x设为1,同时把y设为x+1.原版LET就不行。 | |
| WHEN | 当测试为真时,对主体求值 | |
| UNLESS | 仅在测试表达式返回假时,才对主体求值 | |
| CASE | 相当于C语言的switch | (defun month-length (mon) (case mon ((jan mar may jul aug oct dec) 31) ((apr jun sept nov) 30) (feb (if (leap-year) 29 28)) (otherwise "unknown month"))) |
| TYPECASE | 按照类型来switch | (TYPECASE X (NUMBER (* X 2))) |
| VALUES | 返回多个值 | |
| MULTIPLE-VALUE-BIND | 绑定多个值。如果变量的数量大于数值的数量,剩余的变量会是 nil 。如果数值的数量大於变量的数量,多余的值会被舍弃。 | |
| CATCH | 捕获异常 | (defun super () (catch 'abort (sub) (format t "We'll never see this."))) (defun sub () (throw 'abort 99)) > (super) 99 |
| THROW | 抛出异常 | |
| ERROR | 抛出异常文字 | (ERROR "Oops!") |
| UNWIND-PROTECT | 使程序不会被报错打断 | (UNWIND-PROTECT |
| FBOUNDP | 是否有函数与给定符号绑定 | > (fboundp '+) T |
| SYMBOL-FUNCTION | 返回函数。可用于给函数配置某个名字。 | (setf (symbol-function 'add2) #'(lambda (x) (+ x 2))) > (add2 1) 3 |
| DOCUMENTATION | 获取函数的文档字串 | > (DOCUMENTATION #'+ 'function) "sum of its arguments. With no args, returns 0." |
| LABELS | 声明局部函数。用法与DEFUN一样。 | |
| COND | 直到某个条件为真时才返回。相当于嵌套if或switch | > (cond ((> 3 4) "variant 1") ((> 4 2) "variant 2") (t "always valid variant")) "variant 2" |
| DECLARE(SPECIAL x) | 使x为动态作用域(详见ANSI COMMON LISP 76页) | |
| COMPILED-FUNCTION-P | 检查函数是否已被编译 | |
| COMPILE | 编译函数 | |
| COMPILE-FILE | 编译文件 | |
| MAKE-PATHNAME | 新建一个路径。参数有host, device, directory, name, type 以及 version | > (setf path (make-pathname :name "myfile")) |
| OPEN | 打开文件流。需要一个路径和大量选择性关键字参数。 | > (setf str (open path :direction :output :if-exists :supercede)) ;;supercede表示取代。output表示写文件。input表示读文件。 |
| CLOSE | 关闭文件 | |
| READ-LINE | 从文件流中读一行。若不指定文件流,则从标准输入中读一行,相当于READ。 | |
| WITH-OPEN-FILE | 相当于Python的with,不需要close,保证文件能够关闭。 | (with-open-file (str path :direction :output :if-exists :supercede) (format str "Something~%"));;向文件写入Something\n |
| PRIN1 | 输出包含双引号。给程序产生输出。 | |
| PRINC | 输出不包含双引号。给人类产生输出。 | |
| SYMBOL-NAME | 获取符号名 | > (symbol-name 'abc) "ABC" |
| 垂直杠之间的字符序列将被视为符号。 | ||
| SYMBOL-PLIST | 获取符号的属性列表(PLIST) | > (setf (get 'alizarin 'color) 'red) RED > (get 'alizarin 'color) RED > (setf (get 'alizarin 'transparency) 'high) HIGH > (symbol-plist 'alizarin) (TRANSPARENCY HIGH COLOR RED) |
| DEFPACKAGE | 定义包 | (defpackage "MY-APPLICATION" (:use "COMMON-LISP" "MY-UTILITIES") (:nicknames "APP") (:export "WIN" "LOSE" "DRAW")) (in-package my-application) 这段代码定义了新包my-application,使用了两个包,COMMON-LISP和MY-UTILITIES,一个昵称为APP,这样背的包可以这样引用符号APP:WIN。包本身只输出三个符号"WIN"、"LOSE"和"DRAW"。 |
| IN-PACKAGE | 包结尾 | |
| FLOAT | 将任何实数转换为浮点数 | |
| TRUNCATE | 返回任何实数的整数部分 | |
| FLOOR | 返回小于等于参数的最大整数 | 特殊用法:(floor a b) 返回的是a/b的整数值和余数。计算时默认使用返回的整数。 |
| CEILING | 返回大于等于参数的最小整数 | |
| ROUND | 返回最接近参数的整数 | > (mapcar #'round '(-2.5 -1.5 1.5 2.5)) (-2 -2 2 2);;不做五入,而是取最近的偶数 |
| RANDOM | 接受一个整数或浮点数。返回一个小于n的数字 | |
| SIGNUM | 返回参数的符号。可以返回-1,0或1 | |
| FLOAT | 转换为浮点数 | > (/ 365 12) 365/12;;比值 > (float 365/12) 30.416666 |
| EXPT | (expt x n) = x^n | |
| LOG | (log x n) = \(\log_{n}x\), 若缺省n,则n默认为e | |
| EXP | (exp x) = e^x | |
| SQRT | 平方根 | |
| SIN、COS、TAN | 三角函数 | |
| ASIN、ACOS、ATAN | 反三角函数 | |
| SINH、COSH、TANH | 双曲函数 | |
| ASINH、ACOSH、ATANH | 反双曲函数 | |
| PI | 常数π | |
| short-float短浮点、single-float单精度浮点、double-float双精度浮点、long-float长浮点 | ||
| MOST-POSITIVE-FIXNUM最大整数、MOST-NAGATIVE-FIXNUM最小整数 | (不同实现下不同) | |
| EVAL | 与Python的eval功能相同。可把列表视作代码 | > (eval '(+ 1 2 3)) 6 |
| DEFMACRO | 声明宏 | (defmacro nil! (x) (list 'setf x nil)) 也可定义为: (defmacro nil! (x) `(setf ,x nil)) > (nil! x) NIL > x NIL |
| MACROEXPAND-1 | 展开宏(用于测试) | > (macropexpand-1 '(nil! x)) (SETF X NIL) T |
| , | 在反引号表达式中重启求值 | > (setf a 1 b 2) 2> > `(a is ,a and b is ,b) (A IS 1 AND B IS 2) |
| ,@ | 与逗号相似,但将其(本来应该是列表的)参数扒开。 | > (setf lst '(a b c)) (A B C) > `(lst is ,lst) (LST IS (A B C)) > `(its elements are ,@lst) (ITS ELEMENTS ARE A B C) |
| GENSYM | 自由符号。保证宏定义的变量不会与外面的变量重名。 | (defmacro ntimes (n &rest body) (let ((g (gensym)) (h (gensym))) `(let ((,h ,n)) (do ((,g 0 (+ ,g 1))) ((>= ,g ,h)) ,@body)))) |
| DEFCLASS | 声明类 | (defclass circle () (radius center));;这说明类circle的实例包含两个槽,分别名为radius和center. |
| MAKE-INSTANCE | 创建类的实例 | > (setf c (make-instance 'circle)) |
| SLOT-VALUE | 槽的值 | > (setf (slot-value c 'radius) 1) |
| (槽的属性 | ||
| :accessor、:writer、:reader | 可读写、可写、可读 | (defclass circle () ((radius :accessor circle-radius) (center :accessor circle-center))) > (setf c (make-instance 'circle)) #<CIRCLE #XC5C726> > (setf (circle-radius c) 1) 1 > (circle-radius c) 1 |
| :initarg | 定义参数名 | |
| :initform | 定义缺省值 | (defclass circle () ((radius :accessor circle-radius :initarg :radius :initform 1) (center :accessor circle-center :initarg :center :initform (cons 0 0)))) > (setf c (make-instance 'circle :radius 3)) #<CIRCLE #XC2DE0E> > (circle-radius c) 3 > (circle-center c) (0 . 0) |
| :acclocation :class | 定义类变量 | (defclass tabloid () ((top-story :accessor tabloid-story :allocation :class))) > (setf daily-blab (make-instance 'tabloid) unsolicited-mail (make-instance 'tabloid)) #<TABLOID #x302000EFE5BD> > (setf (tabloid-story daily-blab) 'adultery-of-senator) ADULTERY-OF-SENATOR > (tabloid-story unsolicited-mail) ADULTERY-OF-SENATOR |
| ) | ||
| DEFMETHOD | 定义方法。支持重载,甚至可以对单一的对象做特化。 | (defmethod combine ((x number) (y number)) (+ x y) (defmethod combine ((x (eql 'powder)) (y (eql 'spark))) 'boom) |
| :before :after :around | 标准方法组合机制(standard method combination)规定,调用一个函数会调用:around方法,如果有的话;否则,依序调用:before方法、主方法、:after方法 | |
| DECLARE、DECLAIM | 声明(局部、全局)。 | |
| DECLARE(OPTIMIZE (SPEED 3) (SAFTEY 0)) | 编译参数。speed 0~3。3最快。作用在函数里。 | (declaim (optimize (speed 3) (compilation-speed 0) (safety 0) (debug 0)));;这块代码让所有代码在任何情况下都尽可能更快。 |
| (DECLAIM(INLINE x)) | 使函数x为内联函数。能提高运行速度。递归函数不能内联。 | (declaim (inline single?)) (defun single? (lst) (and (consp lst) (null (cdr lst)))) |
| (DECLAIM (FIXNUM x)) | 声明x为定长数(整数)。 | (defun poly (a b x) (declare (fixnum a b x)) (+ (* a (expt x 2)) (* b x))) |
| (declare (type (vector fixnum 20) v));; 声明了一个仅含有定长数,企鹅长度固定为20的向量。 | ||
| (常见函数及其破坏性版本 | ||
| 安全 | 破坏性 | |
| append | nconc | |
| reverse | nreverse | |
| remove | delete | |
| remove-if | delete-if | |
| remove-duplicates | delete-duplicates | |
| subst | nsubst | |
| subst-if | nsubst-if | |
| union | nunion | |
| intersection | nintersection | |
| set-difference | nset-difference | |
| ) | ||
| DEFTYPE | 定义类型标识符 | (deftype multiple-of (n) `(and integer (satisfies (lambda (x) (zerop (mod x ,n)))))) > (type 12 '(multiple-of 4)) T;;定义了4的倍数的标识符 |
| PACKAGE-NAME | 返回包的名字 | |
| FIND-PACKAGE | 返回一个给定名称的包 | > (find-package "COMMON-LISP-USER") #<Package "COMMON-LISP-USER" 4CD15E> |
| SYMBOL-PACKAGE | 接受一个符号并返回该符号被 interned 的包 | |
| EXPORT | 使符号对其他包可视(可用单冒号访问,不可视时只能用双冒号访问) | |
| IMPORT | 导入包 | |
| USE-PACKAGE | 使用包 | |
| TRACE | 追踪函数,用于调试,可在每次函数调用时显示输入的参数 | |
| UNTRACE | 取消追踪函数 | |

(defun cycli (n)
(if (= (gcd n 10) 1)
(loop with m = 1
with d integer
for c upfrom 1
do (setf (values d m) (floor (* 10 m) n))
when (= m 1) return c)
-1))
(defun num (romanChar)
(case romanChar
(#\I 1)
(#\V 5)
(#\X 10)
(#\L 50)
(#\C 100)
(#\D 500)
(#\M 1000)))
(defun decoder (roman)
(setq res 0)
(dotimes (x (length roman))
(incf res
(if (or (zerop x) (<= (num (char roman x)) (num (char roman (1- x))) ))
(num (char roman x))
(- (num (char roman x)) (* 2 (num (char roman (1- x))))))))
res)
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN