unresolved-external - 如何根据列表的总和返回符号?
问题描述
所以我是Scheme的新手,遇到了一个问题。我想要做的是以下。这是一个相当简单的问题,但我收到了几个错误:
我尝试总结列表的元素(仅由数字组成)。如果总金额是偶数,则该过程应返回 <'divisible_by_2>。如果总金额为奇数,则应返回 <'not_divisible_by_2>。
最初的步骤是建立一个总结列表的过程。这个有效。第二步是构建一个 if 函数,它接受列表的总和,<'divisible_by_2>
如果总和为偶数,<'not_divisible_by_2>
则返回奇数。
到目前为止我写的:
(define (divisible_or_not list-sum lst)
(if (odd? list-sum lst)
(lambda (list-sum lst)
(cond
((null? lst)
0)
((pair? (car lst))
(+(list-sum (car lst)) (list-sum (cdr lst)))
(else
(+ (car lst) (list-sum (cdr lst)))
)
)
)
('divisible_by_2)
('not_divisible_by_2)
)
)
)
2.0 版(lst=tree;tree-count=sum-lst):
(define (divisible-or-not tree)
(define (tree-count tree)
(cond
((null? tree)
0)
((pair? (car tree))
(+(tree-count (car tree)) (tree-count (cdr tree)))
(else
(+ (car tree) (tree-count (cdr tree))))))
(if (odd? tree-count tree)
('divisible-by-2)
('not-divisible-by-2))))
解决方案
正确缩进的代码如下所示:
(define (divisible_or_not list-sum lst)
(if (odd? list-sum lst)
(lambda (list-sum lst)
(cond
((null? lst)
0)
((pair? (car lst))
(+(list-sum (car lst)) (list-sum (cdr lst)))
(else
(+ (car lst) (list-sum (cdr lst))))))
('divisible_by_2)
('not_divisible_by_2))))
您的程序结构如下所示:
(if ...
(lambda (...) ...))
换句话说,如果你的测试成功,你返回一个匿名函数,如果测试失败,你什么也不返回(在Scheme中,值在这种情况下是未定义的)。
在您的 lambda 中,代码是三个表达式的列表, a cond
, form('divisible_by_2)
和 form ('not_divisible_by_2)
。
首先,不要使用下划线来分隔 Lisp/Scheme 中的单词,使用破折号,例如:divisible-by-2
.
其次,只有最后一个表达式的值从 lambda 中返回,所以cond
由于没有副作用,因此中间体基本上是白做的。第二种形式,('divisible_by_2)
看起来像一个函数调用,但会给你一个错误。如果你想返回一个符号,只需引用它,不带括号:'divisible-by-2
。
由于您已经有一个中间函数,您可以将它与一个名称相关联:
(define tree-count (sum tree)
(cond ...))
我命名它tree-count
是因为你也递归到car
你的列表中。
一旦你有了这个功能,你只需要应用它:
(if (even? (tree-count tree))
'divisible-by-2
'not-divisible-by-2)
推荐阅读
- java - 干净的代码 - 避免使用基于通用数据类型的集合进行显式类型转换
- r - R中的轴标签周围的边框
- reactjs - 为什么不能根据道具反应设置初始状态
- vba - 用另一张包含有效值的表格检查一列中的单词并回填它
- sql - 统计数据不同的sql
- spring-mvc - @RefreshScope - JUnit 测试用例
- c# - 获取有关 Android 库的触摸信息
- angular - Object(...) 不是 ionic3 中使用 angularfire2 的函数
- python - 发出并发 selenium/chromedriver 请求时出现 ResponseNotReady 错误
- javascript - Express res.download 极其奇怪的行为