我正在尝试将嵌套向量添加到地图中,即({:cells {[xy]})。我尝试过多种方式来做到这一点,但无论我如何尝试,我都无法让它发挥作用。我不断收到“错误数量的参数(0)传递给:clojure.lang.PercientArrayMap”,或者在另一种情况下,我什至无法让我的剩余函数即(坐标生成)来编译它。我必须手动重新输入它们才能让 REPL 识别它们。一般来说,我确实是一个认真编码的初学者,所以我不知道该去哪里。这是我的功能:
(defn values-manual [grid values]
(let [inter (interleave (coordinates-gen grid) [values])]
(loop [[x y & remaining] inter]
do(
(assoc grid :cells (x y))
(recur remaining)))))
Run Code Online (Sandbox Code Playgroud)
我选择将两个向量(网格和值)交错在一起,因为它们的大小可能不同,并且交错会自动截断为较小的向量,这对于我的输出来说是理想的。然后我访问该列表的前两个元素。然后将它们与我的“网格”地图中的 :cells 键关联起来。然后对其余元素重复。一旦我尝试运行它,它就无法工作,并且我的其他定义的函数也无法被识别。我还使用了 do() 因为我可以验证循环是否适用于多个函数。到底是怎么回事?非常感谢任何帮助。
我尝试了我能想到的一切。这是我的第一个大型编码项目。
为什么结果(cons (list 1 2) (list 3 4))是((1 2) 3 4)?
我想知道为什么结果长度为3(3个元素).我的直觉让我觉得这
(list 1 2)是一个列表,(list 3 4)也是一个列表.通过使用cons过程,结果应该是两个元素,每个元素都是一个列表,但结果并不像我期望的那样.
谁能告诉我为什么?谢谢.
我们已经从lisp获得了作业,我需要使用"循环"列表(我不知道这是什么命名).通过"循环"列表,我的意思是列表,cdr最后一个cons的哪一个指向同一列表中的第一个.
(Value1 . PointerValue2) (Value2 . PointerValue3) (Value3 . PointerValue1)
Run Code Online (Sandbox Code Playgroud)
我们被教导要创建这样的列表:
(defun cykl (l)
(setf (cdr (last l)) l)
)
Run Code Online (Sandbox Code Playgroud)
我使用的Lisp软件(Lispbox)不支持这种列表.我也在Debian上尝试了clisp,但是在创建了这样的列表后它已经崩溃了.
你知道哪些lisp实现支持这个(免费软件,os独立)?
我是Common Lisp的新手,经历了一个教程,无法解决这个问题
(equal '(reverse (a b)) '(b a)))
Run Code Online (Sandbox Code Playgroud)
返回零.
非常感谢你的帮助.
M.
使用mit-scheme尝试一些Lisp。
(define (inv curstate x y)
((cond (= y 1) curstate)
(cond (even? y)
(inv (square curstate) x (/ y 2)))
(else
(inv (* x curstate) x (- y 1)))))
Run Code Online (Sandbox Code Playgroud)
解释器错误:
格式错误的子句:curstate
另一个版本使用线性递归方法,因此存在类似的错误。该怎么办?
我想对((A 4)(B 2)(C 3)(D 5))进行排序,使得结果为((D 5)(A 4)(C 3)(B 2)).我有正常的排序技术,但它不适用于子列表.
我想创建一个包含URL的列表,如下所示:
(setf assertion '(BookStore targetNamespace http://www.books.org))
Run Code Online (Sandbox Code Playgroud)
但这会导致此错误消息:
Error in READ [or a callee]: There is no package with the name HTTP.
Run Code Online (Sandbox Code Playgroud)
为什么URL会产生错误?
如何将URL作为列表元素包含在内?
我目前正在研究一些涉及多项式的代码(不是我的),以便更好地理解功能样式LISP编程.
(define collect-terms(a)
(sort a #'compare))
(defun compare(a b)
(llt (car (cdr a)) (car (cdr b))))
Run Code Online (Sandbox Code Playgroud)
我不明白当函数定义为2时,compare方法在collect-terms中调用时,compare方法如何才能只使用一个参数.
在这种情况下,compare成功获取传递的列表的子列表,并将它们用作a和b的值.
我正在尝试编写一个lisp函数来测试一个数字是否为素数.我收到了lambda表达式错误(我已经搜索过以前回答的与此相关的问题),但我找不到解决方案.
(defun prime(n)
(
(defvar '(*ok* nil) (*i* nil) (*d* nil)
(setf *ok* 1)
(loop for *i* from 1 to (sqrt n) do
(
(if (= (mod n *d*) 0)
(setf *ok* 0))
)
)
(if (= *ok* 1)
(format t "Numarul prim")
(format t "Numarul nu este prim")
)
)
Run Code Online (Sandbox Code Playgroud)
)