小编Nik*_*nov的帖子

压扁一次程序

我正在努力编写一个程序,这个程序(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),所以我想它会使列表的一部分变平.我尝试通过递归继续定义,但这只是错误,所以我想我错过了一些东西.

lisp scheme racket

1
推荐指数
1
解决办法
1423
查看次数

了解查找二项式系数的递归方法

在尝试使用递归方法解决寻找二项式系数的作业时,我想出了这个:

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 的一堆不同值,它们都给出了预期的结果,因此代码有效,我只是不知道为什么以及如何。我会非常感谢一个愚蠢的解释。谢谢!

java

1
推荐指数
1
解决办法
6395
查看次数

将元素插入列表列表中的子列表的开头

我的任务有点麻烦.我必须创建一个请求列表和元素列表的过程,然后继续将元素添加到每个子列表中的第一个位置.我设法做到了,它看起来像这样:

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

lisp scheme racket

0
推荐指数
1
解决办法
1329
查看次数

标签 统计

lisp ×2

racket ×2

scheme ×2

java ×1