0

我只是在制作随机程序并查看是否可以使用local. 有什么办法可以用来local做这个吗?-

(define (filt n)
  (filter number? n))

(define (mapn n)
 (map add1 (filt n)))

(define (mapl n)
  (map list (mapn n)))

    (check-expect (mapl(list 1 2 false "true" "b" 'b true 4 9)) (list (list 2) (list 3) (list 5) (list 10)))

第一个程序确保输出只是数字。第二个程序将每个数字加 1,第三个程序创建列表中每个单独元素的列表。

我试过了,但我没有得到任何答案,最终导致用户中断。

(define (mapit n)
  (local [(define (filt l)
          (filter number? l))]
    (local [(define (mapn b)
             (map add1 b))]
      (mapit (map list n)))))
4

1 回答 1

1

你想用let.

(let ( (name value)
       (othername othervalue))
  expression-using-name)

所以

(define (map-it n)
  (let ((filt (lambda (l)
                 (filter number? l)))
        (mpan (lambda (b)
                 (map add1 b))))
     (mapit map list n)))

但是你想在这里完成什么?您实际上并没有在使用mapnfilt在任何地方使用。

我想你可以使用

(define (mapl n)
  (define (filt n)
    (filter number? n))

  (define (mapn n)
   (map add1 (filt n)))

  (map list (mapn n)))

由于方案允许嵌套定义。

于 2013-11-10T18:13:22.980 回答