我写了这个程序:
(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。
我不知道问题出在哪里。有人能帮我吗?谢谢你。
发布于 2011-04-18 02:27:16
首先,你在eq?后面有太多的括号--你写的东西意味着计算(quotient (car a) (car b)),并把它当作一个带有参数(quotient (car (cdr a)) (car (cdr b)))的函数。这个错误意味着第一件事的计算结果是1,而你的解释器期望它是一个过程,而不是一个整数。这一行应该是:
(if (eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))或者甚至是:
(if (eq? (quotient (car a) (car b)) (quotient (cadr a) (cadr b)))除此之外,使用display调用的行是错误的-- Scheme没有中缀表示法,所以+和*是不合适的。
发布于 2011-04-18 02:29:56
首先,您的代码中有一组大括号(lambda之前的那个)。
在传递给eq的参数周围还有另外一组括号?它应该是这样的:
(eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))发布于 2011-04-18 02:30:54
在Scheme和球拍中,括号改变了事物的含义。
1是一个数字,但是
(1)是对1的调用作为函数...但是1是一个数字,而不是一个函数,所以这会导致你所描述的错误。
你对花括号的使用也让我有点不安。
https://stackoverflow.com/questions/5695378
复制相似问题