本地计划

时间:2013-11-10 18:04:07

标签: scheme local racket

我只是编写随机程序并查看是否可以使用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)))))

1 个答案:

答案 0 :(得分: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)))

由于scheme允许嵌套定义。