2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
||||||
1 | ||||||
Функция ввода-вывода в Lisp печатает числа в виде трапеции20.11.2014, 21:51. Показов 6867. Ответов 24
Метки нет (Все метки)
Добрый вечер, всем!
Задание 4 (PR1 k m), которая печатает числа в виде трапеции (m - количество строк, k - число, с которого начинается печать. вот я делаю так:
0
|
20.11.2014, 21:51 | |
Ответы с готовыми решениями:
24
Common LISP - функция вставки числа в массив Функция ввода / вывода разработать драйвер доступа к портам ввода-вывода в виде библиотеки DLL Написать программу, которая печатает числа в виде таблицы |
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
||||||
20.11.2014, 22:04 | 2 | |||||
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
20.11.2014, 23:40 | 3 |
CLHS: http://clhs.lisp.se/Body/f_wr_pr.htm Всё максимально конкретно.
Я бы с удовольствием пояснил, но честно не понимаю, что пояснить. Функции вывода - это функции, которые выводят. Ещё есть вопросы? Не мудрствуя лукаво, используйте функции princ, которая выводит объект без перевода строки, и terpri, которая переводит строку. И вложенный цикл.
1
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
||||||
21.11.2014, 04:32 [ТС] | 4 | |||||
Сообщение от helter
Сообщение от helter
У меня лекция написали вот это. :input - открыть для ввода :output - открыть для вывода :io - двусторонный (для ввода-вывода) это как понимать? Привести пример. Еще есть функция запись и чтение из файла (PRINx поток) и (READ поток) - чем это отличается между потоков PRINx и READ? Оба потоков одинаковый или разный? Видимо, что на лекции всегда написали очень кратко пояснений. Поэтому у меня очень много вопросов. Еще у меня есть вопрос, вот это пример,
(+ m 1) - знак плюс это как бы возрастание строк трапеция, а минус убывание строк трапеция?
0
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
21.11.2014, 04:48 [ТС] | 5 |
Сообщение от castorsky,
define это не функция. defun - это выражение, которые дает имя и определить новую функцию с помощью функции "defun". Вот из программа "gnu common lisp" (см. на картинке). Ваш код lisp ошибка и я немного поправил тоже ошибка.
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
21.11.2014, 05:10 | 6 |
А вы немецкий в школе учили? Беда. Советую начать учить английский прямо сейчас.
В таком случае я с удовольствием присоединюсь к обсуждению. Я могу пояснить основные идеи, но спецификацию, конечно, не буду переводить. Чтение и запись осуществляются с помощью абстракции "поток": читают из потока, пишут в поток. Например, это могут быть стандартные потоки ввода/вывода (взаимодействие с консолью), или поток может ассоциироваться с файлом, или со строкой. Поток может быть потоком ввода (когда из него можно только читать), потоком вывода (когда можно только писать), и двусторонним (когда можно читать и писать). Функций вывода много: это семейство родственников write и format. Семейство родственников write занимаются выводом одного объекта за раз. Они делятся на две группы: те, которые стараются сериализовать объект (чтобы его можно было восстановить, прочитав из потока), и те, которые делают более человекочитаемый вывод. Главная сериализующая функция - print, а человекочитаемая - princ. Последняя не переводит строку. Функция terpri переводит строку и больше ничего не делает. Ещё пригождаются функции write-string, write-line, write-char, предназначенные для своих типов данных (write-line печатает строку и переводит строку). Каждая из этих функций принимает объект, который надо напечатать, а опционально - поток вывода. Если поток вывода не задан, используется стандартный вывод. Насчёт format - читайте главу в "Практическом Common Lisp", русский перевод который вы, без сомнения, нагуглите. Чтением занимаются: read-line читает строку, read-char читает символ, read читает лисповое выражение (типа таких, какие печатает print). read открывает дыру в безопасности, не используйте его для пользовательского ввода, если не умеете заткнуть эту дыру. Эти функции можно вызывать без аргументов (тогда они читают из стандартного ввода), а можно в качестве аргумента давать им поток ввода и ещё кое-какие вещи. Интерактивный ввод/вывод осуществляется с помощью стандартного потока *query-io*. Там есть некоторые тонкости, не буду на них останавливаться. То что у вас с :input и пр. - это про файлы. Чтобы открыть файл и ассоциировать с ним поток, используется макрос with-open-file (гуглите так: "with-open-file" clhs). Читайте про cond (гуглите cond clhs). cond - оператор ветвления; в каждой ветке сначала пишется условие, а потом - одна или несколько форм. cond выбирает первую ветку, для которой условие выполняется, вычисляет формы и возвращает значение последней вычисленной формы. В данном случае (= n 0) - условие равенства n нулю. Так пишут начинающие, а труЪ-лисперы пишут (zerop n). Если это выполняется, надо вернуть t (истина). Знак плюс это как бы функция сложения. В качестве литературы можете использовать "Практический Common Lisp". Добавлено через 1 минуту Не надо лучше её использовать, это не ANSI CL, а в соответствии с CLtL2. castorsky пишет на диалекте Racket.
3
|
Модератор
|
||||||
21.11.2014, 11:34 | 7 | |||||
2
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.11.2014, 15:35 | 8 |
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
||||||
21.11.2014, 16:35 | 9 | |||||
Clojure:
4
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
21.11.2014, 19:32 [ТС] | 10 |
Сообщение от helter,
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
21.11.2014, 19:44 | 11 |
CLtL2 (Common Lisp the Language 2) - книга, в который описан до-ANSI Common Lisp. У него есть некоторые отличия от ANSI Common Lisp. ANSI CL определяется стандартом, который доступен онлайн в виде CLHS - Common Lisp Hyperspec.
Если у тебя линукс, можешь поставить SBCL из репозитория. Если нет - ну, можно CLISP попробовать: www.clisp.org.
0
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
21.11.2014, 19:54 [ТС] | 12 |
helter, где установочный файл clisp, который ты меня дал ссылку??
P.S. не обижайся на меня. ладно?)
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
21.11.2014, 20:02 | 13 |
Вот тут пара ехешников есть:
http://sourceforge.net/project... lisp/2.49/ Я бы попробовал скачать и запустить, который "биг". Да вроде не за что пока.
0
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
|
21.11.2014, 20:19 [ТС] | 14 |
helter, пока. спасибо.
Добавлено через 5 минут Здесь код lisp, которые скинули форумчане. Выдает ошибку( Ну ладно. Завтра я постараюсь сделать код lisp и выложу прямо здесь и проверим правильно сделал или нет)
0
|
Модератор
|
||||||
21.11.2014, 20:37 | 15 | |||||
- не выдает:
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
21.11.2014, 20:52 | 16 |
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
25.11.2014, 15:26 | 17 |
0
|
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 93
|
||||||
25.11.2014, 16:00 [ТС] | 18 | |||||
Сообщение от Catstail,
А сейчас вот я сам немного переделал
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
25.11.2014, 16:26 | 19 |
Вооот, я всегда говорю, что готовые решения расслабляют. Мы потеряли потенциального лиспера.
0
|
castorsky
|
25.11.2014, 16:39
Функция ввода-вывода в Lisp печатает числа в виде трапеции
#20
|
Не по теме: помянем :cry:
0
|
25.11.2014, 16:39 | |
Написать программу, которая печатает числа в виде таблицы Напишите функцию, которая печатает числа в следующем виде Написать программу, которая печатает числа в виде таблицы Функция ввода и вывода массива вещественных чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |