我正在做旧考试,为自己的考试做好准备,教授也很好,也给了我们解决方案,现在我想知道为什么一个功能会做什么呢?'应该是。
(defun sortulists (L)
(mapcar (lambda (uliste)
(sort uliste (lambda (x1 x2)
(or (symbolp x2)
(and (numberp x1) (numberp x2)
(< x1 x2))))))
L))
它应该使用一个列表L
,其中包含未分类的子列表,这些子列表可能包含数字和原子,并先排序它的数字,然后将符号放在最后。
当像(sortulists '((A 9 b h 2) (1 m n 9 8) (5 a 7)))
这样调用时,它会返回((2 9 H B A) (1 8 9 N M) (5 7 A))
。
任何帮助?
编辑:修正缩进
答案 0 :(得分:6)
sort
函数的谓词说明序列排序后测试必须为真。如何定义排序。
如果您在这里使用and
和or
时遇到困难,建议您阅读Common Lisp: A Gentle Introduction to Symbolic Computation的条件一章。它显示了如何交换cond
,嵌套if
以及组合and
和or
,并提供练习(及其解决方案)。
简而言之,要么右边有一个符号,要么两个都是数字,它们必须按大小排序。
答案 1 :(得分:6)
(or
; if x2 is a symbol, then x1 is smaller, whatever x1 is
(symbolp x2)
; if both are numbers, then return t if x1 is smaller than x2
(and (numberp x1) (numberp x2)
(< x1 x2)))
所以这些数字是在前面排序的。符号在最后,但未分类。
答案 2 :(得分:3)
所以要说清楚:
(defun sortulists (L)
(mapcar (lambda (uliste)
(sort uliste (lambda (x1 x2)
(or (symbolp x2)
(and (numberp x1) (numberp x2)
(< x1 x2))))))
L))
mapcar
只列出了对每个元素应用匿名函数的列表。因此,只需关注一个元素'(A 9 b h 2)
即可:
;; same as the anonymous lambda, but named so we can test it a little
(defun my< (x1 x2)
(or (symbolp x2)
(and (numberp x1) (numberp x2)
(< x1 x2))))
(sort '(A 9 b h 2) #'my<) ; ==> (2 9 B H A)
(my< 2 'a) ; ==> T
(my< 2 3) ; ==> T
(my< 3 3) ; ==> NIL
(my< 'a 2) ; ==> NIL
(my< 'a 'b) ; ==> T
(my< 'b 'a) ; ==> T
如果my<
是符号,则x1
x2
小于x2
。如果x1
都是数字且x1
算术小于x2
,则x1
也会更小。对于其他所有内容x2
等于或大于t
。
如果在参数列表中混合一些符号,您可能会看到符号的顺序与原始列表的顺序不同。原因是两个符号的比较将成为'a
两种方式,因此'b
小于'b
且'a
小于(stable-sort '(A 9 b h 2)
(lambda (x1 x2)
(and (numberp x1)
(or (not (numberp x2))
(< x1 x2)))))
; ==> (2 9 A B H)
。我们在结果中保持符号顺序的版本如下所示:
stable-sort
注意我使用sort
函数,因为<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="jquery.min.js" type="text/javascript"></script>
</head>
<body>
<style>
#nav li ul {
display: none;
}
</style>
<div id="nav">
<li><a href="javascript:void(0)">Subject</a>
<ul>
<li><a href="">Subject</a></li>
</ul>
</li>
<li><a href="">Subject</a></li>
<li><a href="javascript:void(0)">Subject</a>
<ul>
<li><a href="">Subject</a></li>
</ul>
</li>
<li><a href="">Subject</a></li>
</div>
<script>
$(document).ready(function() {
$('#nav li a').click(function() {
$('#nav li ul').hide();
$(this).next('ul').fadeIn();
});
});
</script>
</body>
</html>
不能保证稳定。稳定意味着相等的对象保持与源相同的顺序。