1

我有一个使用命令执行的方案程序;(primes<= n) 给我所有小于 n 的素数;(primes<= 200) 给我所有小于 200 的素数

如何在 linux 中为下面的程序创建一个可执行文件,以 n 作为参数

---------Scheme Program------------------------------------------------

    #lang racket

(define  (interval-list m n)
  (if (> m n)
      '()
      (cons m (interval-list (+ 1 m) n))))
(define (sieve l)
  (define (remove-multiples n l)
    (if (null? l)
         '()
         (if  (= (modulo (car l) n) 0)      ; division test
              (remove-multiples n (cdr l))
              (cons (car l)
                    (remove-multiples n (cdr l))))))
  (if (null? l)
      '()
      (cons (car l)
             (sieve (remove-multiples (car l) (cdr l))))))
(define (primes<= n)
  (sieve (interval-list 2 n)))

上述程序执行为 (primes<= 100) 打印所有小于 100 的素数

4

2 回答 2

1

看来您正在使用 Racket,因此您应该按照这些说明创建可执行文件。通常,每个 Scheme 系统都提供了自己的方法来创建可执行文件,因此您必须阅读系统随附的文档。

您可能会喜欢这种 Eratosthenes 筛的替代实现:

(define (primes n) ; sieve of eratosthenes
  (let ((ps (list)) (sieve (make-vector (+ n 1) #t)))
    (do ((p 2 (+ p 1))) ((< n p) (reverse ps))
      (when (vector-ref sieve p)
        (set! ps (cons p ps))
        (do ((i (* p p) (+ i p))) ((< n i))
          (vector-set! sieve i #f))))))
于 2013-08-31T11:19:55.940 回答
0

您可以通过插入将 Racket 模块转换为 unix 样式的脚本

#! /usr/bin/env racket

(如果球拍在您的搜索路径中)在顶部并使其可执行(chmod)。

有关更多详细信息,请参阅创建 unix 样式脚本的文档。

于 2013-08-31T20:07:50.777 回答