- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
服务器下面的代码显示列表中的整数数量。
(defun isNum (N)
(and (<= N 9) (>= N 0)))
(defun count-numbers (list)
(let ((count 0))
(dolist (item list count)
(cond
((null list) nil)
(((and (<= N 9) (>= N 0))) item)(incf count))
(setq(0 + count))))))
当我运行命令时出现错误 A' is not of the expected type
REAL'(计数'(3 4 5 6 a 7 b))
最佳答案
考虑到您的 cond
,我很惊讶它能运行构造不当,您在代码的不必要的副作用生成位中切换到中缀表示法,并且您在 count-numbers
中使用未绑定(bind)变量.假设地,如果它确实运行了,那么这个错误听起来是正确的。您正在对参数进行数字比较(以及非数字输入的错误)。
我今天戴上了代码审查帽,所以让我们更深入地了解一下。
Lisp(实际上哪个并不重要,afaik 这适用于 CL、Scheme 和所有杂种)使用 lower-case-snake-case-with-dashes
,而不是 lowerCamelCase
用于变量和函数名称。
(defun is-num (n)
(and (<= n 9) (>= n 0)))
Common Lisp 惯例是以 p
结束谓词或 -p
而不是以 is-
开头. Scheme 具有(IMO 更好)结束谓词的约定 ?
相反
(defun num-p (n)
(and (<= n 9) (>= n 0)))
((and (<= N 9) (>= N 0)))
不是你调用函数的方式。你实际上需要使用它的名字,而不仅仅是尝试调用它的主体。这是您尝试运行此代码时会遇到的众多错误之一的来源。
(defun count-numbers (list)
(let ((count 0))
(dolist (item list count)
(cond
((null list) nil)
((num-p item) item)(incf count))
(setq(0 + count))))))
numberp
已经存在,并且对其输入进行类型检查,而不是尝试进行数字比较。您可能应该改用它。
(defun count-numbers (list)
(let ((count 0))
(dolist (item list count)
(cond
((null list) nil)
((numberp item) item)(incf count))
(setq(0 + count))))))
((numberp item) item) (incf count))
可能不会像您认为的那样做 cond
条款。它实际上被视为两个单独的条款;检查是否 item
是 number
, 如果是则返回它。第二个尝试检查变量 incf
并返回 count
如果它的计算结果为 t
(它没有,也不会)。你似乎想要的是增加计数器 count
当你在列表中找到一个数字时,这意味着你应该把它 incf
item
中的子句.
(defun count-numbers (list)
(let ((count 0))
(dolist (item list count)
(cond ((null list) nil)
((numberp item)
(incf count)
item))
(setq (0 + count)))))
(setq (0 + count))
由于三个原因是错误的
0
与变量 +
和 count
作为论点。setq
的第二部分,这意味着您正在尝试将以上设置为 NIL
含蓄地。至此,我们终于有了一段可以正确评估和运行的代码(并且不会抛出您上面提到的错误)。
(defun count-numbers (list)
(let ((count 0))
(dolist (item list count)
(cond ((null list) nil)
((numberp item)
(incf count)
item))
count)))
dolist
是一个迭代结构,它为给定列表中的每个元素做一些事情。这意味着您实际上不需要使用 cond
手动测试列表终止.另外,因为 dolist
不收集结果,没有理由返回 item
给它。您还不必要地隐藏了本地 count
您在 let
中声明.
(defun count-numbers (list)
(let ((count 0))
(dolist (item list)
(when (numberp item) (incf count)))
count))
像往常一样,您可以使用更简单的 loop
来完成所有这些工作打电话。
(defun count-numbers (list)
(loop for item in list
when (numberp item) sum 1))
这使计数器隐式化并使您无需手动返回它。事实上,除非这是专门编写你自己的迭代函数的练习,否则 Common Lisp 有一个内置的 count-if
。 ,这需要 predicate sequence [some other options]
并返回 count
sequence
中的项目匹配 predicate
.如果你想命名 count-numbers
具体来说,出于风格原因,您可以
(defun count-numbers (list) (count-if #'numberp list))
并完成它。
总之,不错的尝试,但请尝试reading up在 language 上家庭for realzies在提出进一步问题之前。
关于lisp - `A' 不是预期的类型 `REAL',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11414260/
我对java有点陌生,所以如果我犯了一个简单的错误,请原谅我,但我不确定我哪里出错了,我收到的错误是“预期的.class,预期的标识符,而不是声明, ';'预期的。”我尝试了不同的方法,并从这些方法中
This question already has answers here: chai test array equality doesn't work as expected (3个答案) 3年前
我正在学习 Java(对不起,我的英语很差,这不是我的母语),当我在 Eclipse (JavaSE-1.7) 中在我输入的每个“try”中执行“try-finally” block 时,会出现以下消
我收到两个错误,指出 token 上的语法错误,ConstructorHeaderName expected instead & token “(”上的语法错误,< expected 在线: mTM.
我找不到错误。 Eclipse 给我这个错误。每个 { } 都是匹配的。请帮忙。 Multiple markers at this line - Syntax error on token “)”,
代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DoubleIt extends
我正在用 python(Vs 代码)编写代码,但出现此错误: Expected ")" Pylance 错误发生在:def main() 我试着运行我的 main 并将它打印到我的屏幕上。我用谷歌搜
我正在尝试按照 documentation 中的建议使用异步函数。但我收到此错误 意外的 token ,预期 ( async function getMoviesFromApi() { try
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
第一行包含一个表示数组长度的整数p。第二行包含用空格分隔的整数,这些整数描述数组中的每个元素。第三行打印一个整数,指示负数组的数量。 package asgn3; import java.util.*
好的,我是初学者,我必须修复此 java 表达式语言代码才能在我的系统 (Windchill) 中工作,但看起来我在语法中遗漏了一些内容: LWCNormalizedObject lwc =
我无法编译我的程序! 我想我缺少一个花括号,但我怎么也看不出在哪里! import javax.swing.*; import java.awt.*;
我的 jQuery 代码有问题,我的 Firebug 向我发出警告:需要选择器。 这是代码: $("img[id$='_tick']").each(function() { $(this).c
我的新类(class) Fountainofyouth 遇到了问题。尝试构建整个项目后,调试器显示 warning: extended initializer lists only available
我已经从 Java 转向 CPP,并且正在努力围绕构造构造函数链进行思考,我认为这是我的问题的根源。 我的头文件如下: public: GuidedTour(); GuidedTour(string
鉴于以下 for(var i=0; i< data.cats.length; i++) list += buildCategories(data.cats[i]); jsLint 告诉我 Expect
我有这个 json,但 Visual Studio Code 在标题中给了我警告。 [ { "title": "Book A", "imageUrl": "https:
我正在尝试编写一个有条件地禁用四个特殊成员函数(复制构造、移动构造、复制赋值和移动赋值)的包装类,下面是我用于测试目的的快速草稿: enum class special_member : uint8_
所以我用 F# 编写了一个非常简单的程序,它应该对 1000 以下的所有 3 和 5 的倍数求和: [1..999] |> List.filter (fun x -> x % 3 = 0 || x %
我是一名优秀的程序员,十分优秀!