любые 32 битовых значения (на машине на 32 бита) соответствовали бы некоторому 'допустимому' адресу в виртуальном адресном пространстве
Неправильный. Записи страницы могут указать на физическую память, которая не существует или отмечена запрещенная, или они могут содержать недопустимый шаблон.
Я полагаю, что Вы захотите проверить свою документацию системы Схемы на:
Например, если бы Вы использовали Схему MIT/GNU, то я отослал бы Вас к:
Если у Вас есть гибкость, по которому интерпретатору Схемы Вы используете, Схема MIT/GNU портирована ко многим операционным системам, включая Linux, так работал бы хорошо на пример выше.
Для превращения этой программы Схемы в файл, который выполняет интерпретатор Схемы, запустите ее со строки хижины и сделайте ее исполняемым файлом (chmod +x /path/to/program
). Строка хижины является первой строкой исполняемого файла и запускается с #!
сопровождаемый полным путем к интерпретатору. Так как Вы используете Ракетку:
#!/usr/bin/racket
Если Вы не хотите указывать полный путь к интерпретатору, но хотеть вместо этого искать его в исполняемом пути поиска $PATH
, затем используйте
#!/usr/bin/env racket
Для доступа к параметрам командной строки Ракетка обеспечивает библиотеку парсинга командной строки] (http://docs.racket-lang.org/reference/Command-Line_Parsing.html), или можно получить параметры командной строки непосредственно с (current-command-line-arguments)
. Необходимо будет вызвать racket
с -f
опция:
#!/usr/bin/racket -f
…
(define arg (string->number (vector-ref (current-command-line-arguments) 0)))
(display (primes<= arg))
(newline)
Это не может быть объединено с #!/usr/bin/env
искать racket
в $PATH
. Если Вы хотите это, сделайте свой сценарий полиглотом:
#!/bin/sh
":"; exec racket -f "$0" "$@"
…
Если Вы хотите, чтобы Ваш сценарий был портативным через реализацию Схемы, это возможно при условии, что реализация следует за SRFI 22 (который Ракетка не делает).
#!/usr/bin/env scheme-r5rs
…
(define (main argv)
(display (primes<= (string->number (list-ref argv 1))))
(newline))