这只是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/编译。
答案 0 :(得分:1)
将输出列表转换为字符串的最简单方法是格式:
(format t "~{~a ~}" '(a b c)) => A B C