Создайте исполняемый файл для программы схемы с аргументами

любые 32 битовых значения (на машине на 32 бита) соответствовали бы некоторому 'допустимому' адресу в виртуальном адресном пространстве

Неправильный. Записи страницы могут указать на физическую память, которая не существует или отмечена запрещенная, или они могут содержать недопустимый шаблон.

4
02.09.2013, 01:33
2 ответа

Я полагаю, что Вы захотите проверить свою документацию системы Схемы на:

  • компиляция к собственному исполняемому файлу, и
  • передача параметров командной строки от оболочки ОС

Например, если бы Вы использовали Схему MIT/GNU, то я отослал бы Вас к:

Если у Вас есть гибкость, по которому интерпретатору Схемы Вы используете, Схема MIT/GNU портирована ко многим операционным системам, включая Linux, так работал бы хорошо на пример выше.

2
27.01.2020, 20:56

Для превращения этой программы Схемы в файл, который выполняет интерпретатор Схемы, запустите ее со строки хижины и сделайте ее исполняемым файлом (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))
2
27.01.2020, 20:56

Теги

Похожие вопросы