首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scheme equal列表函数

scheme equal列表函数
EN

Stack Overflow用户
提问于 2011-04-18 02:08:00
回答 3查看 1.4K关注 0票数 0

我写了这个程序:

代码语言:javascript
复制
(define find-combination
  {lambda (a b)
    (if (eq? ((quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b)))))
         (display "1*v1" + ((quotient (car a) (car b))*"v2"))
         (display "0*v1" + "0*v2"))})

(find-combination (list 2 2) (list 2 1))

A和b是两个列表。它给了我下一个问题:过程应用:预期的过程,给定: 1;参数: 2。

我不知道问题出在哪里。有人能帮我吗?谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-18 02:27:16

首先,你在eq?后面有太多的括号--你写的东西意味着计算(quotient (car a) (car b)),并把它当作一个带有参数(quotient (car (cdr a)) (car (cdr b)))的函数。这个错误意味着第一件事的计算结果是1,而你的解释器期望它是一个过程,而不是一个整数。这一行应该是:

代码语言:javascript
复制
(if (eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))

或者甚至是:

代码语言:javascript
复制
(if (eq? (quotient (car a) (car b)) (quotient (cadr a) (cadr b)))

除此之外,使用display调用的行是错误的-- Scheme没有中缀表示法,所以+*是不合适的。

票数 0
EN

Stack Overflow用户

发布于 2011-04-18 02:29:56

首先,您的代码中有一组大括号(lambda之前的那个)。

在传递给eq的参数周围还有另外一组括号?它应该是这样的:

代码语言:javascript
复制
(eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))
票数 0
EN

Stack Overflow用户

发布于 2011-04-18 02:30:54

在Scheme和球拍中,括号改变了事物的含义。

代码语言:javascript
复制
1

是一个数字,但是

代码语言:javascript
复制
(1)

是对1的调用作为函数...但是1是一个数字,而不是一个函数,所以这会导致你所描述的错误。

你对花括号的使用也让我有点不安。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5695378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档