Для C++ действительно нет большой части различия между структурами и классами. Основное функциональное различие - то, что члены структуры общедоступны по умолчанию, в то время как они являются частными по умолчанию в классах. Иначе, насколько язык затронут, они эквивалентны.
Однако я склонен использовать структуры в C++ как, я делаю в C#, подобном тому, что сказал Brian. Структуры являются простыми контейнерами данных, в то время как классы используются для объектов, которые должны действовать на данные в дополнение к тому, чтобы просто держаться за него.
Реализация схемы DrScheme и имя, которое вы используете для ее выполнения из командной строки, - mzscheme
. Документация по запуску сценария командной строки находится здесь: Сценарии Unix (документация по схеме PLT) . Использование аргументов командной строки объясняется здесь: Анализ командной строки (Документация схемы PLT) .
В результате вы можете использовать сценарии shebang следующим образом:
#! /usr/bin/env mzscheme
#lang scheme/base
(...scheme s-exps...)
или, если вам нужен больший контроль над флагами командной строки для mzscheme
необходимо запустить сценарий следующим образом:
#! /bin/sh
#|
exec mzscheme -cu "$0" ${1+"$@"}
|#
#lang scheme/base
(...scheme s-exps...)
Для обработки аргументов командной строки используется функция командная строка
. Вы найдете примеры того, как его использовать, в статье, на которую ведет вторая ссылка.
Также, как принимать аргументы от командная строка в программе на схеме?
Библиотека R6RS определяет функцию, называемую командной строкой
, которая возвращает список аргументов (первый из которых является именем программы). Однако не все реализации Scheme реализуют R6RS; в вашей реализации может быть другая функция для этого.
Как вы запускаете программы Scheme из терминал в linux (ubuntu)?
Это зависит от того, какую реализацию схемы вы используете.
Он не стандартизирован в R6RS . Есть рекомендация SRFI-22 , которую поддерживают некоторые интерпретаторы. Если ваш интерпретатор не поддерживает SRFI-22, это зависит от вашей реализации.
Ниже приведен пример из SRFI. Предполагается, что ваш интерпретатор представляет собой двоичную схему с именем scheme-r5rs. Обычно он вызывает функцию с именем main с единственным аргументом, который представляет собой список аргументов командной строки.
#! /usr/bin/env scheme-r5rs
(define (main arguments)
(for-each display-file (cdr arguments))
0)
(define (display-file filename)
(call-with-input-file filename
(lambda (port)
(let loop ()
(let ((thing (read-char port)))
(if (not (eof-object? thing))
(begin
(write-char thing)
(loop))))))))
Это решение работает для меня
#! /usr/bin/env guile
!#
(display "hello")
(newline)