Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 具有可自定义比较功能的排序功能_Sorting_Scheme_Lisp_Racket - Fatal编程技术网

Sorting 具有可自定义比较功能的排序功能

Sorting 具有可自定义比较功能的排序功能,sorting,scheme,lisp,racket,Sorting,Scheme,Lisp,Racket,写完后: (define (sort-asc l) (cond ((eq? l '()) '()) ((eq? (cdr l) '()) (list (car l))) ((< (car l) (cadr l)) (cons (car l) (sort-asc (cdr l)) )) (else (cons (cadr l) (sort-asc (cons (car l) (cddr l)) ))))) 但是(sort-f'(4 3 8

写完后:

(define (sort-asc l)
  (cond ((eq? l '()) '())
        ((eq? (cdr l) '()) (list (car l)))
        ((< (car l) (cadr l)) (cons (car l) (sort-asc (cdr l)) ))
        (else (cons (cadr l) (sort-asc (cons (car l) (cddr l)) )))))

但是
(sort-f'(4 3 8 2 5)您的第三个
cond
分支条件应该是
(f(car l)(cadr l))
,而不是
(lambda()…)
lambda
表达式返回一个过程(未调用),并且由于所有过程都是真实的,因此永远不会到达第四个(
else
)分支

就是

((lambda ()(f (car l) (cadr l))) (cons (car l) (sort-f (cdr l) f)))
应该是

((f (car l) (cadr l)) (cons (car l) (sort-f (cdr l) f)))

我认为你的
SORT-ASC
也不起作用。你可能应该尝试类似于或的东西。无论如何,要使用作为参数传递的函数,你可以只做
(F ARG1 ARG2)
。不需要那样
LAMBDA
@jkiiski不仅仅是“不需要那样的
LAMBDA
”,但它会主动导致代码不工作,因为
lambda
返回一个过程,这个过程总是真实的。@ChrisJester-Young可能jkiiski认为X10D的意思是
(cond…((lambda()(f(car l)(cadr l))))
,除了虚假的(和错误的)之外,它还可以工作
lambda
,您可以通过使用
first
等使其看起来更好。我忘记Scheme是否有它们,但如果没有,它们很容易定义。@tfb
first
second
等都内置在Racket中。SRFI 1中也可以用于其他Scheme实现。我猜
((lambda()(f(car l)(cadr l)))
可以工作,但是对于
(f(car l)(cadr l))
来说,这是非常多的额外输入,而且可读性要差得多。
((f (car l) (cadr l)) (cons (car l) (sort-f (cdr l) f)))