[英]Truncating a list in (constrained) Racket
我的问题确实是最重要的逻辑之一,任务是将列表截短到球拍中的给定长度。 也就是说,给定一个列表(ABC),给定长度为2,我想要一个新列表(AB)。 约束条件是我们只有有限的可用功能列表,我将在下面列出。 如果这个问题很简单,我会道歉,但是我很艰难,无法解决必要的顺序。 如果有人甚至可以将我指向正确的方向,那就太好了。
功能列表:
我已经创建了一个返回列表长度的函数,我也理解这将需要某种形式的递归。
我不会以您自己的方式(毕竟您要求获得指示)来破坏获得答案的乐趣,所以我会给您一些提示。 通过使用标准模板来递归遍历列表(我们处理第一个元素,然后使用其余元素调用递归)并构建输出列表(使用cons
)来解决此问题,请注意它重复使用它。 只需填写空白:
(define (truncate lst n)
(cond ((null? lst) ; if the list is empty then n is invalid
<???>) ; and you should signal an error
((= n <???>) ; if n is zero we're done
<???>) ; return an empty list
(else ; otherwise build the output list
(cons <???> ; cons the first element in the list and call the recursion
(truncate <???> <???>))))) ; move to the rest of the list, decrement n
第一个条件是可选的,如果您可以假定要截断的元素数量正确,只需删除它即可。 它应该按预期工作:
(truncate '(A B C) 2)
=> '(A B)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.