显示字符串列表而不是显示一个字符串

时间:2016-11-30 05:42:33

标签: string common-lisp clisp

这只是Common Lisp中的Caesar Cipher,旋转键设置为5。

  

我有一些限制
  必须以列表的形式递归读取和处理输入   不允许变量,数组,循环,预测   输出必须是字符串而不是列表   该程序必须只使用递归。

(defun encode (expr)   ; define function funcName (argument)
  ; Out case when the list is empty
  (cond ((null expr) nil)     ; conditional (test1 action1)
  ; Checking if the expression is an atom only then to go encryption
  ((atom expr)  (encrot expr))  ; test2 see if one or less atom
  ; Adding the result of encrot to the list and
  (t(cons (encode(car expr)) (encode(cdr expr)))))) ; will run if all others fail

(defun encrot (expr)
  ; casts the object and then shifts the char by 5
  (string (int-char(encrot2 (+ 5 (char-int(char (string expr) 0)))))))

(defun encrot2 (x)
  ; Checking to see if the atom is a letter
  (cond (( > x 90) (+ 64 ( mod x 90 )))
  (( < x 91) x)))

我的理解是函数cons将列表元素显示为字符串。例如(“A”“B”“C”)

作为一个字符串,理论上应该看起来像"A B C"

我使用GNU CLISP 2.49(2010-07-07)http://clisp.cons.org/编译。

1 个答案:

答案 0 :(得分:1)

将输出列表转换为字符串的最简单方法是格式:

(format t "~{~a ~}" '(a b c)) => A B C