我刚刚开始学习计划,并且不太明白为什么这个功能不起作用:
;(define (sort l)
(define (sorted? l)
(if (= (length l) 2)
; if simple list:
(if (< (head l) (tail l))
#t
#f)
; if complex list:
(if (and (< (head l) (head (tail l)))
(sorted? (tail l)))
#t
#f)))
输出:
(排序?(1 0))。 。程序申请:预期程序, 给定:1;参数是:0 (排序?'(1 0))。 。 &lt ;:期望type为第二个参数,给出: (0);其他论点是:1
球拍,R5RS
答案 0 :(得分:1)
你用什么方案? 在R5RS(方案标准)中,使用汽车和cdr来获得头尾。
cdr会给你PAIR,而不是原子。 那是有效的。
(定义(排序?l)
(if(=(length l)2)
;如果简单列表:
(如果(&lt;(car l)(cadr l))
#T
#F)
;如果复杂的清单:
(if(和(&lt;(head l)(head(tail l)))
(排序?(尾l)))
#T
#F)))
答案 1 :(得分:1)
这是因为您在行cadr
有更多机会为您工作后,比较整数和列表if (< (head l) (head (tail l)))
或if (< (head l) (tail l))
而不是; if simple list
。< / p>
以下定义适用于我:
(define (sorted? xs)
(cond
((<= (length xs) 1)
#t)
((< (car xs) (cadr xs))
(sorted? (cdr xs)))
(else #f)))