【问题标题】:Enter elements to a list and make it become palindrome向列表中输入元素并使其成为回文
【发布时间】:2023-02-01 17:30:04
【问题描述】:

我是新来的计划并坚持这个问题:

输入列表 = (a b c) 输出 = (a b c b a )

尝试使用 (reverse) 并得到反转列表,但不知道如何使列表成为回文。

【问题讨论】:

  • 你知道函数append吗?如果这是家庭作业,你可以使用它吗?
  • 是的,我知道。那么我应该做类似(append list (reverse))的事情吗?
  • 刚刚发现如何处理它。非常感谢。

标签: list scheme palindrome


【解决方案1】:

只需将原始列表附加到反向列表即可。

(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)

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。我在这里写下我的首选解决方案,但您也可以找到其他解决方案。

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

    因为我知道人们喜欢看到递归过程的迭代过程,所以我消除了堆叠并且我还有一个完整的尾递归变体。你可以选择你最喜欢的。

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

    这是一个测试:

    % mit-scheme < mk-pali.scm
    MIT/GNU Scheme running under GNU/Linux
    
    ....
    
    1 ]=> (mk/pali '(a b c))
    ;Value: (a b c c b a)
    
    1 ]=> (mk/pali/tail '(a b c))
    ;Value: (a b c c b a)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多