【问题标题】:working with lists in scheme使用方案中的列表
【发布时间】:2012-02-15 10:43:20
【问题描述】:

我有这个功能:

(define (unfold f init)
  (if (eq? (f init) '())
    (list)
    (cons (car (f init)) (unfold f (cdr (f init))))))

我想用它来定义一个函数:

(hypothetical-function '(1 2 3 4 5))

应该返回:

'((1 2 3 4 5) (2 3 4 5) (3 4 5) (4 5) (5)

【问题讨论】:

  • 还有,它有什么问题?
  • 另外,functionunfold之间是什么关系?
  • 我的展开没有问题!我想在定义函数时使用展开。
  • unfold function in scheme 的可能重复项
  • 再一次,我不想实现展开功能,因为我已经做到了!我正在尝试定义一个函数,它接受一个列表并返回一个列表列表,这样每个列表都像上面一样删除了第一个元素。

标签: lisp scheme racket


【解决方案1】:

好的,你想要

(define (tails xs) (unfold foo xs))

为此,您需要定义适当的foo。现在,foo 应该怎么做?它应该返回一对,其中第一个组件成为结果列表的car,第二个组件成为递归调用的种子 - 除非展开停止,当foo 应该返回一个空列表。所以

(define (foo xs)
    (if (stop-condition)
        '()
        (cons car-of-result next-seed)))

填写剩余的详细信息留给读者作为练习。

【讨论】:

  • (define (all-suffixes list) (unfold delete list)) (define (delete list) (if (null?list) (list) (cons (car list) (cdr list))) )
  • 对。 cons (car list) (cdr list) 通常只是 list,所以这不是你想要的。
  • 嗯,那么(缺点(汽车清单)(删除(cdr 清单)))
  • 没有。在您的示例中,所需结果的第一个元素是什么?
  • 期望结果的第一个元素是原始的lis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 2015-02-04
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多