2016-11-30 197 views
-1

這僅僅是一個愷撒密碼Common Lisp中設置爲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))) 

我的理解是,該功能利弊顯示列表作爲字符串的元素。例如(「A」「B」「C」)

作爲一個字符串,理論上應該是這樣的"A B C"

我使用GNU CLISP 2.49編譯(2010-07-07)http://clisp.cons.org/

+1

你能舉一個例子(輸入+輸出)? – coredump

+2

'cons'什麼也沒有顯示。它沒有做任何輸出。 'cons'只是構建一個cons cell。 –

回答

1

到輸出列表轉換爲字符串的最簡單方法是與格式:

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

除非你真的想要印刷副作用,否則最好使用'(format nil ...)' – Vatine

+0

謝謝Leo,那工作 –

+0

@Vatine更好! –