使用嵌套列表(未知程度)(球拍)
Working with nested-list (to unknown degree) (Racket)
这是我第一次发帖,所以如果我搞砸了请告诉我:)
这是一个我无法导入或使用的作业 "for functions"。所以我有一个嵌套列表,但我不知道它嵌套的程度,所以它可能是这样的:
'(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
or
'((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
or
'(((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)))
or
4 times bigger then that
注:虽然不一定是4倍
然后我必须对每个函数应用一个参数,没有改变列表中的位置,所以上面的函数可能是:
'(1 2 3 4)
and
'((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
and
'(((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1)))
and so on
对于未知度部分如何解决这个问题,我真的很困惑。用已知的度数来解决是非常简单的,你只需要一系列的函数与 car 和 cdr 循环。老实说,我不知道如何开始 未知学位 部分,所以非常感谢您的帮助!
这基本上就像遍历一个 s 表达式。您可以像 s 表达式一样对数据建模:
; NestedFuncs is one of
; - Func
; - [List-of Nested-Funcs]
一旦完成,遍历它就很容易了。一个函数处理数据,第二个函数遍历列表。
#lang racket
(define (apply-nfs nfs arg)
(if (list? nfs)
(apply-nf-list nfs arg)
(nfs arg)))
(define (apply-nf-list nf arg)
(if (empty? nf)
'()
(cons (apply-nfs (car nf) arg)
(apply-nf-list (cdr nf) arg))))
这是一个示例和输出:
(define nf-ex
`((,add1 ,sub1 ,sub1 ,add1)
(,sub1 (,add1 ,add1) ,add1 ,sub1)
(,add1 ,add1)
(,add1 ,add1 (,sub1 (,add1)) ,add1)))
(apply-nfs nf-ex 3)
; => '((4 2 2 4) (2 (4 4) 4 2) (4 4) (4 4 (2 (4)) 4))
这是我第一次发帖,所以如果我搞砸了请告诉我:)
这是一个我无法导入或使用的作业 "for functions"。所以我有一个嵌套列表,但我不知道它嵌套的程度,所以它可能是这样的:
'(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
or
'((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
or
'(((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>))
((#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)
(#<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt> #<procedure:curried:tt>)))
or
4 times bigger then that
注:虽然不一定是4倍
然后我必须对每个函数应用一个参数,没有改变列表中的位置,所以上面的函数可能是:
'(1 2 3 4)
and
'((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
and
'(((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1))
((1 2 3 4)
(1 2 3 4)
(2 3 4 5)
(9 8 2 1)))
and so on
对于未知度部分如何解决这个问题,我真的很困惑。用已知的度数来解决是非常简单的,你只需要一系列的函数与 car 和 cdr 循环。老实说,我不知道如何开始 未知学位 部分,所以非常感谢您的帮助!
这基本上就像遍历一个 s 表达式。您可以像 s 表达式一样对数据建模:
; NestedFuncs is one of
; - Func
; - [List-of Nested-Funcs]
一旦完成,遍历它就很容易了。一个函数处理数据,第二个函数遍历列表。
#lang racket
(define (apply-nfs nfs arg)
(if (list? nfs)
(apply-nf-list nfs arg)
(nfs arg)))
(define (apply-nf-list nf arg)
(if (empty? nf)
'()
(cons (apply-nfs (car nf) arg)
(apply-nf-list (cdr nf) arg))))
这是一个示例和输出:
(define nf-ex
`((,add1 ,sub1 ,sub1 ,add1)
(,sub1 (,add1 ,add1) ,add1 ,sub1)
(,add1 ,add1)
(,add1 ,add1 (,sub1 (,add1)) ,add1)))
(apply-nfs nf-ex 3)
; => '((4 2 2 4) (2 (4 4) 4 2) (4 4) (4 4 (2 (4)) 4))