Function 方案错误:应用:非过程;
我在Scheme中练习递归。下面的代码用于返回连分数的值:Function 方案错误:应用:非过程;,function,scheme,fractions,Function,Scheme,Fractions,我在Scheme中练习递归。下面的代码用于返回连分数的值: (define (fun n v) (define (fun-wl b v) ( (if (null? b)v ;return a value (fun-wl (cdr b) (/ 1 (+ (car b) v)))))) ;first arg.list, second(1/(ca
(define (fun n v)
(define (fun-wl b v) (
(if (null? b)v ;return a value
(fun-wl (cdr b) (/ 1 (+ (car b) v)))))) ;first arg.list, second(1/(car b+v))
(define (iter a b)
(if (null? a)(fun-wl b v)
(iter (cdr a) (cons (car a) b)))) ;reverse list
(iter n null)
)
这是我对方案的输入:
(fun '(1 2 3 4) 6)
我从我的代码中得到了这个错误:
应用:不是程序;
应为可应用于参数的过程
给定值:72/103
参数…:[无]
下一行中有括号问题。请记住,在Lisp中,表达式周围的一对括号表示“应用函数”,在这种情况下,我们不是应用if
表达式的结果,我们所做的是返回if
表达式本身的值:
(define (fun-wl b v) ( ; that one at the end is wrong!
此外,还可以改进缩进,正确格式化代码将有助于发现此类问题。试试这个:
(define (fun n v)
(define (fun-wl b v)
(if (null? b)
v
(fun-wl (cdr b) (/ 1 (+ (car b) v)))))
(define (iter a b)
(if (null? a)
(fun-wl b v)
(iter (cdr a) (cons (car a) b))))
(iter n null))
它按预期工作:
(fun '(1 2 3 4) 6)
=> 72/103
在第二行末尾有一个游离的开括号。括号表示Scheme中的函数调用。您是否尝试过谷歌搜索?这是重复多次的。谢谢,我太蠢了;)唐纳:想评论一下吗?这个答案有什么问题,或者我如何改进它?向下投票工具提示说“这个答案没有用”。虽然这个答案可能对询问者有用,但对于堆栈溢出站点来说,它并不像投票关闭一个副本那样有用,可能需要注意“在
(if…
)周围加上括号,阅读链接副本以了解更多细节”。另一个重复的问题和答案只是稀释了对“应用程序:不是程序”问题(已经有一大堆问题)的标准答案的任何尝试。