Function 方案错误:应用:非过程;

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

我在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/(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…
)周围加上括号,阅读链接副本以了解更多细节”。另一个重复的问题和答案只是稀释了对“应用程序:不是程序”问题(已经有一大堆问题)的标准答案的任何尝试。