簡體   English   中英

向列表中輸入元素並使其成為回文

[英]Enter elements to a list and make it become palindrome

我是新來的計划並堅持這個問題:

輸入列表 = (abc) output = (ab c c ba )

嘗試使用 (reverse) 並得到反轉列表,但不知道如何使列表成為回文。

只需將原始列表 append 轉換為反向列表即可。

(define (palindrome lst)
  (append lst (reverse lst)))

(define (reverse lst)
  (define (iter lst res)
    (cond ((null? lst)res)
        (else
         (iter (cdr lst) (cons (car lst)res)))))
    (iter lst '()))

> (palindrome '(1 2 3))

  '(1 2 3 3 2 1)

有很多方法可以做到這一點。 我在這里寫下我的首選解決方案,但您也可以找到其他解決方案。

(define mk/pali
  (lambda (l)
    ((lambda (s) (s s l (lambda (r) (r '()))))
     (lambda (s l* ret)
       (if (null? l*)
           (ret (lambda (pali) pali))
           (s s (cdr l*)
              (lambda (r0)
                (ret (lambda (y)
                       (cons (car l*)
                             (r0 (cons (car l*) y))))))))))))


(mk/pali '(a b c))

這是一個測試:

% mit-scheme < mk-pali.scm
1 ]=>

....

1 ]=> (mk/pali '(a b c))
;Value: (a b c c b a)

1 ]=>
End of input stream reached.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM