3

每当我使用 chibi-scheme v 0.5.3 运行下面的代码时,我在文件 project_euler.scm: empty application in source: () 的第 11 行收到一个错误,但是当我使用 Dr Racket 时它运行良好。有谁知道为什么会这样?

#! /usr/bin/env chibi-scheme

(define (sum-of-amicable-pairs n)
  (let ((sums (list->vector (map (lambda (i) 
                                   (reduce + 0 
                                           (filter (lambda (j) (= (remainder i j) 0)) 
                                                   (iota (+ 1 (quotient i 2)) 1 1)))) 
                                 (iota n 0 1)))))
    (let loop ((len (vector-length sums))
                    (res-list '())
                    (i 0))
      (cond
        ((= i len) (reduce + 0 res-list))
        ((and (< (vector-ref sums i) n) 
              (or (> (vector-ref sums i) i) (< (vector-ref sums i) i))
              (= (vector-ref sums (vector-ref sums i)) i))
         (loop len (cons (+ (vector-ref sums i) (vector-ref sums  (vector-ref sums i))) res-list)
               (+ i 1)))
        (else
          (loop len res-list (+ i 1)))))))

(sum-of-amicable-pairs 10000)
4

1 回答 1

8

好吧,我想我知道这里发生了什么。当你加载 chibi-scheme REPL 时,它使用的是 R7RS Scheme,但是当你加载一个文件时,它使用的是 Chibi 支持的最基本的 Scheme 版本。见:http ://synthcode.com/scheme/chibi/#h3_SchemeStandard

如果您放在(import (scheme base))文件的顶部,那么您将不再收到有关空应用程序的错误。您也应该这样做(import (srfi 1))以获得您使用的列表处理程序。见:http ://synthcode.com/scheme/chibi/#h2_StandardModules

于 2012-07-08T22:27:37.217 回答