Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
1

Почему DrRacket не компилирует код

29.07.2014, 12:20. Просмотров 903. Ответов 6
Метки нет (Все метки)


Кто нибудь объясните мне пожалуйста почему DrRacket не компилирует следующий код (я только начал изучать Лисп, может где-то допустил глупую ошибку или что-то не понял)
Lisp
1
2
3
4
5
6
(defun ask-numder ()
    (format t "Please enter a number. ")
    (let ((val (read)))
      (if (numberp val)
          val
          (ask-number))))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2014, 12:20
Ответы с готовыми решениями:

Как исправить на код DrRacket
(defun hex-to-bin (&optional (in "d:/hex.in") (out "d:/bin.in") ) (with-open-file (s in...

Scheme код в DrRacket
Перевод чисел из шестнадцатеричной системы в двоичную. Число записано в файле hex.in, вывод в файл...

Почему Code::Blocks не компилирует код?
#include<stdio.h> #include<conio.h> int *Union(int *A, int *B, int nA, int nB, int& nC){ int...

почему не компилирует?
Уважаемые программисты, просьба подсказать в чем заключается данная ошибка. Что это за сборка, где...

6
3269 / 2331 / 425
Регистрация: 28.04.2012
Сообщений: 7,818
29.07.2014, 13:06 2
Цитата Сообщение от QzzQ Посмотреть сообщение
почему DrRacket не компилирует следующий код
Потому что это код на Common Lisp, а не Racket.
0
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
29.07.2014, 13:31  [ТС] 3
Это две разные реализации языка, так я понял. А синтаксис в них тоже получается отличается или просто разные способы достижения результата
0
3269 / 2331 / 425
Регистрация: 28.04.2012
Сообщений: 7,818
29.07.2014, 14:28 4
Лучший ответ Сообщение было отмечено QzzQ как решение

Решение

Цитата Сообщение от QzzQ Посмотреть сообщение
Это две разные реализации языка, так я понял
Это два разных языка.

Цитата Сообщение от QzzQ Посмотреть сообщение
А синтаксис в них тоже получается отличается
Отличается.

Цитата Сообщение от QzzQ Посмотреть сообщение
разные способы достижения результата
Да.

Добавлено через 17 минут
Lisp
1
2
3
4
5
6
7
(define (ask-number)
  (display "Please, enter a number: ")
  (let* ((s (read-line))
         (x (string->number s)))
    (if (number? x)
        x
        (ask-number))))
1
4320 / 3329 / 339
Регистрация: 12.03.2013
Сообщений: 5,828
29.07.2014, 16:35 5
Лучший ответ Сообщение было отмечено QzzQ как решение

Решение

Цитата Сообщение от QzzQ Посмотреть сообщение
(read)
Учтите, что это дыра в безопасности программы, которую вам надо долго и нудно затыкать.

Добавлено через 55 минут
Цитата Сообщение от QzzQ Посмотреть сообщение
(format t "Please enter a number. ")
Вот эта штука может не так работать, как вы предполагаете. Например, на SBCL. Лисп имеет право буферизовать вывод, поэтому предложение ввода может вылезти, например, в конце работы программы. Лучше написать
Lisp
1
2
3
4
5
(format *query-io* "Please enter a number. ")
(force-output *query-io*)
(handler-case
  (parse-integer (read-line *query-io*))
  (error () (ask-number)))
Стандартный поток *query-io* служит для интерактивного общения с пользователем. Функция force-output смывает буфер: иначе может получиться, что лисп уже ждёт ввод, а приглашение не показал. Насчёт ошибок я загнул, вам это ещё непонятно, ну да ладно. Функция parse-integer преобразует строку в целое число (если строка не парсится, функция генерирует ошибку, которая в данном коде перехватывается handler-case). Для других числовых типов такой функции нет. Если бы надо было запрашивать, например, вещественное число, можно было бы считать ввод пользователя в строку, а потом воспользоваться функцией read-from-string, проверив предварительно, что строка содержит только цифры и точку. В этом случае приходится следить за безопасностью, потому что read-from-string задействует ридер.

Вообще, тяжеловесность лиспа в операциях такого типа убивает. А подходящих библиотек я не знаю.
1
3269 / 2331 / 425
Регистрация: 28.04.2012
Сообщений: 7,818
29.07.2014, 17:11 6
Цитата Сообщение от helter Посмотреть сообщение
А подходящих библиотек я не знаю.
http://www.cliki.net/parse-number
1
4320 / 3329 / 339
Регистрация: 12.03.2013
Сообщений: 5,828
29.07.2014, 19:48 7
Спасибо, только я имел в виду что-нибудь для организации диалогов с пользователем, чтобы не возиться всё время с force-output, но и сильно не велосипедить. Было бы идеально найти библиотеку для удобной генерации REPLов.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2014, 19:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Почему компилятор не компилирует?
Компилятор выдает ошибку. Вот программа: #include <stdio.h> int main(void){ ...

Почему ошибка и не компилирует
static int matrix = null; static int numOfRows; numOfCols; static final int maxSize = 4; ...

Не пойму почему не компилирует
Начал читать "Как програмировать на С++" Дейтелов Дошёл до главы "Введение в классы и объекты",...

Что не так с кодом, почему не компилирует?
Привет, пытаюсь решить задачку : В массивах X и Y поменять местами MAX и MIN элементы в каждом из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.