我有以下代码:
(define (howMany list)
(if (null? list)
0
(+ 1 (howMany (cdr list)))))
Run Code Online (Sandbox Code Playgroud)
如果我们执行以下操作:(howMany '(1 2 3 (4 5)))我们将得到 4 结果。我该如何做才能计算列表中的整数数量。这意味着同样的问题将返回 5 作为答案,而不是 4。
在Clozure Common Lisp中调用(file-exists -p"somepath")时,我得到一个"未定义的函数FILE-EXISTS-P with arguments ..."错误,但在任何地方我看起来这个函数都应该可用.我甚至在使用Mx apropos时都会看到它.
我正在使用LispBox for Windows.
有没有人知道可能出现什么问题,或者可能建议我可以尝试解决这个问题的过程?
当我使用此函数创建数组时,出现以下错误:
> (defun f1(lst)
(setf m (make-array '((length lst) 3))))
F1
> (f1 '(1 2 3))
Error: Not a nonnegative integer - (LENGTH LST)
Run Code Online (Sandbox Code Playgroud)
列表的长度应为非负整数,在这种情况下为3,那么为什么会出现此错误,我该怎么办?
> (length '(1 2 3))
3
Run Code Online (Sandbox Code Playgroud) 我将这个函数从一个更大的脚本中分离出来,并通过https://www.jdoodle.com/execute-clisp-online/运行它。即使抛出了一个错误,它似乎也遵循 LISP 的规则,除非我遗漏了一些明显的东西。
(defun cannibals-can-eat (state start-state)
(let ((left-bank-missionaries 2)
(left-bank-cannibals 5)
(right-bank-missionaries (- 3 left-bank-missionaries))
(right-bank-cannibals (- 2 left-bank-cannibals)))
(if (or (> left-bank-cannibals left-bank-missionaries)
(> right-bank-cannibals right-bank-missionaries))
t
nil)))
Run Code Online (Sandbox Code Playgroud)
错误有时是The variable LEFT-BANK-MISSIONARIES is unbound.unmatched close parenthesis或syntax error near unexpected token('`。使用此版本的函数,错误是后者。
我需要一个函数来检查偶数位置上某些数字的所有数字是否均匀.最低位数位于位置1,从右到左.该函数需要用lisp编写.例子:
245 -> true, since 4 is even
238456 -> false, since 5 is odd and 8 and 2 are even
and so on...
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
(defun check(number fac)
(cond
((= (/ number fac) 0) t)
((= (mod (/ number fac) 2 ) 0) (check number (* 100 fac) ) )
(nil)))
Run Code Online (Sandbox Code Playgroud)
初始值为fac10,我们将数字除以10,提取第二个数字,检查它是否为偶数,如果是,继续并将数字除以1000以提取第4个数字,依此类推,直到我们越过所有数字,比函数返回true,同时如果某个数字为奇数,则该函数应该返回nil.但是有些东西是错的,而且nil当我把它称为(check 22 10)例如时,函数会一直返回.
有什么想法吗?
以下过程获取两个列表,并将它们的并集作为有序列表返回。
(defun stable-union (lst1 lst2)
(cond ((null lst1) lst2)
((null lst2) lst1)
((and (null lst1) (null lst2)) nil)
(t
(let ((el1 (car lst1))
(el2 (car lst2)))
(cond ((string= el1 el2)
(cons el1
(stable-union (cdr lst1) (cdr lst2))))
((string< el1 el2)
(cons el1
(stable-union (cdr lst1) lst2)))
(t
(cons el2
(stable-union lst1 (cdr lst2)))))))))
Run Code Online (Sandbox Code Playgroud)
它仅适用于某些示例,而不适用于其他示例。例如:
STABLE-UNION: (STABLE-UNION '(A B C) '(B A D)) failed:
Expected (A B C D) but saw (A B A C D)
STABLE-UNION: (STABLE-UNION '(A B C) …Run Code Online (Sandbox Code Playgroud) 我迷失了评估这段代码以查找错误的念头。我不确定为什么会得到未定义的函数。有人可以指导我理解原因吗?谢谢!
O应该是一个对象,L应该是一个列表。我正在尝试将O附加到列表的末尾并返回列表
(defun my_attach(O L)
(cond ((eq L nil )
O )
(t (cons (car L) (my-attach O (cdr L)) )
)
)
)
Run Code Online (Sandbox Code Playgroud) 我&rest对普通 lisp 的作用感到困惑。这可能是一个代表我的意思的例子:
(defmacro switch (value &rest pairs)
....
)
Run Code Online (Sandbox Code Playgroud)
&rest 和pairs 到底是什么意思?
common-lisp ×7
lisp ×6
recursion ×2
arrays ×1
ccl ×1
clisp ×1
clozure-cl ×1
cons ×1
digit ×1
function ×1
macros ×1
numbers ×1
ordered-set ×1
position ×1
racket ×1
scheme ×1
syntax ×1
syntax-error ×1