Scheme (方案)如何划分这些列表?
我如何在计划中实施此功能: *输入:((1.1)(1.7)) *输出:((1.2)(1.4)(1.6))((1.3)(1.5)(1.7))) 基本上我有一个包含两个元素的列表。每个元素也是一个包含两个元素的列表,两个元素都是整数>=0和<8 我必须创建这个:Scheme (方案)如何划分这些列表?,scheme,Scheme,我如何在计划中实施此功能: *输入:((1.1)(1.7)) *输出:((1.2)(1.4)(1.6))((1.3)(1.5)(1.7))) 基本上我有一个包含两个元素的列表。每个元素也是一个包含两个元素的列表,两个元素都是整数>=0和
input ((a1 . b) (a1 . c))
output: (if (and (= a1 a2) (odd? b))
While < b c
(list (a1 . b+1) (a1 . b+3) (a1 . b+n)...))
(list (a2 . b) (a2 . b+2) (a2 . b+4)...)
输入((a1.b)(a1.c))
输出:(如果(和(=a1 a2)(奇数?b))
而
“划分列表”
注意:(a.b)
不是合适的列表。它是一对还是一对。请参阅下面的不同处理,其中输入是一个列表,但左侧和右侧是cons-es: 给定输入:
((a1.b)(a2.c))
左边是:
(汽车输入)
右边是:
(cadr输入)
a1:
(汽车左侧)
a2:
(汽车右侧)
b:
(cdr左)
c:
(cdr右)
奇偶对列表的生成:
创建一个初学者例程(这里称为Hawaiian),它如上所述分割输入。此启动器将调用递归列表生成器,在本例中称为夏威夷:
;;; ((abscissa0 . start) (abscissa1 . end )) =>
;;; (Hawaii start end abscissa '() '())
;;; When abscissa0 == abscissa1
(define (Hawaiian pairs)
(let* ((first (car pairs))
(second (cadr pairs))
(start (cdr first))
...
(Hawaii start end abscissa0 '() '()))))
正如您所注意到的,调用夏威夷时有两个空列表,即结果的初始值设定项:奇偶对列表
夏威夷例行程序从结束到开始向后计数,并根据当前数字是奇数还是偶数添加到适当的偶数列表中。追加后,它再次调用自身(使用较低的计数),直到当前计数为开始
夏威夷的第一行和最后一行:
;;;开始-结束横坐标null=>(列出偶数)
;;; 赔率=(列表(横坐标开始)…(横坐标开始+2)…)
;;; evens=(列表(横坐标开始+1)…(横坐标开始+3)…)
(定义(夏威夷开始当前横坐标)
;倒数(开始输入和输出之间的关系不是很明显——我想你需要解释一下。这是一个学校项目,我必须创建夏威夷支票谢谢,这非常有用!
;;; start end abscissa null null => (list odds evens)
;;; odds = (list (abscissa . start) ... (abscissa . start+2) ...)
;;; evens = (list (abscissa . start+1) ... (abscissa . start+3) ...)
(define (Hawaii start current abscissa odds evens)
;; Counting backward (start <- current )
(let((new-el (cons abscissa current)))
(if (= current start)
(list (cons new-el odds) evens)
(let* ((next...
(elist...
... ))
(Hawaii start next abscissa olist elist)))))