繁体   English   中英

在(受限)球拍中截断列表

[英]Truncating a list in (constrained) Racket

我的问题确实是最重要的逻辑之一,任务是将列表截短到球拍中的给定长度。 也就是说,给定一个列表(ABC),给定长度为2,我想要一个新列表(AB)。 约束条件是我们只有有限的可用功能列表,我将在下面列出。 如果这个问题很简单,我会道歉,但是我很艰难,无法解决必要的顺序。 如果有人甚至可以将我指向正确的方向,那就太好了。

功能列表:

  • 利弊,汽车,cdr,定义,引用,如果,康德,否则
  • 算术的基本形式(+,-,*,/)
  • 非常基本的测试(基本数字比较,null?,list?,eq?)

我已经创建了一个返回列表长度的函数,我也理解这将需要某种形式的递归。

我不会以您自己的方式(毕竟您要求获得指示)来破坏获得答案的乐趣,所以我会给您一些提示。 通过使用标准模板来递归遍历列表(我们处理第一个元素,然后使用其余元素调用递归)并构建输出列表(使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM