我试图写出最近的""函数,在Lisp中,不使用setq / setf等...
该函数找到给定向量的最近向量(在列表列表中找到它)。
我试过但没有套装太难了,非常感谢。
答案 0 :(得分:1)
通常,变量的更新是通过递归完成的:
<div class="container">
<div class="row">
<div class="col-md-6">
text
</div>
<div class="col-md-6 video-box">
video
</div>
</div>
</div>
完成后,您可以将帮助程序放入主函数中:
(defun main-function (arg)
(main-function-helper arg 0 1))
(defun main-function-helper (arg var1 var2)
(if (= arg var1)
var2
(main-function-helper arg (1+ var1) (1+ var2))))
对于正面论证,这当然是(defun main-function (arg)
(labels ((helper (var1 var2) ; arg left out since it's not changed
(if (= arg var1)
var2
(helper (1+ var1) (1+ var2)))))
(helper 0 1)))
的愚蠢实现。
答案 1 :(得分:0)
如果没有设置,则返回列表列表以防有关系:
(注意:循环宏在某一点使用set:P)
(defun euclid (v1 v2)
(sqrt (loop for x in v1 for y in v2 sum
(expt (- x y) 2))))
(defun closest (target listoflists distancefn)
(loop for l in listoflists for d = (apply distancefn (list target l))
minimizing d into min
collecting (list l d) into col
finally (return
(loop for (vec dis) in col when
(eql dis min) collect vec))))
(closest '(1 2 3) '((1 2 2) ( 1 2 2) ( 2 2 2)) #'euclid)
> ((1 2 2) (1 2 2))