我正在努力编写一个程序,这个程序(flatten-once '((b) (c f) ((d)(e))))会使列表变平一次,即
产生'(b c f (d) (e))).我查看了几个关于标准flatten过程如何工作的来源,但它实现了intermediate student with lambda我需要使用的语言形式中未包含的函数.据我所知,它foldr会有所帮助,并设法得到这个
(define (flatten-once lst)
(cond
[(empty? lst) lst]
[else
((foldr cons (first (rest lst)) (first lst)))]))
Run Code Online (Sandbox Code Playgroud)
返回'(b c f),所以我想它会使列表的一部分变平.我尝试通过递归继续定义,但这只是错误,所以我想我错过了一些东西.
在尝试使用递归方法解决寻找二项式系数的作业时,我想出了这个:
public class Binomial
{
public static long binom(int n, int k)
{
if (k==n || k==0)
return 1;
else return binom(n-1,k-1) + binom(n-1, k);
}
Run Code Online (Sandbox Code Playgroud)
对于n=5; k=3该方法返回的值 10。尝试使用 k 和 n 的一堆不同值,它们都给出了预期的结果,因此代码有效,我只是不知道为什么以及如何。我会非常感谢一个愚蠢的解释。谢谢!
我的任务有点麻烦.我必须创建一个请求列表和元素列表的过程,然后继续将元素添加到每个子列表中的第一个位置.我设法做到了,它看起来像这样:
(define (add-element lst elem)
(foldr cons lst (list elem)))
(define (insert-first lst1 x)
(cond
[(empty? lst1) empty]
[else (local [(define insert (add-element(first lst1) x))]
(cons insert (insert-first (rest lst1) x)))]))
Run Code Online (Sandbox Code Playgroud)
所以,如果你要输入,(insert-first '((a b) (c d))你最终会得到(list (list 'x 'a 'b) (list 'x 'c 'd))
唯一的问题是我需要使用map和编写程序local.后者我认为我已经完成了但我不能为我的生活找到一种方法来使用map.