Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
1

напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде

15.03.2013, 13:39. Показов 4062. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста тошо вообще не пойму как делать

напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рождения.

Вот наброски
Lisp
1
2
3
4
5
6
7
8
9
(defun spis (sp) 
   (setq rez 0) 
 (dolist (el sp rez)
    (setq n(car el))
    (if (= n "sob")(setq rez(cdr el))
 ) 
)
 
(spis (ivanov 1992)(sob 2001)(sam 1985))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2013, 13:39
Ответы с готовыми решениями:

Функция, которая спрашивает у пользователя ФИО студента из группы и выдает данные о нем
Привет. Задание такое: Напишите функцию, которая спрашивает у пользователя ФИО студента из...

Составить программу, которая выводит на экран ФИО студента, номер группы
Составить программу, которая выводит на экран ФИО студента, номер группы.

На основе данных входного файла составить список сотрудников учреждения, включив следующие данные: ФИО, год принятия
Помогите пожалуйста написать программу на языке C#: :boredom: На основе данных входного файла...

Написать программу, которая спрашивает ФИО пользователя, выделяет из него имя пользователя, и формирует на экране
Написать программу, которая спрашивает ФИО пользователя, выделяет из него имя пользователя, и...

31
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
15.03.2013, 14:23 2
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun task (spis)
 (let ((fio (read)))
    (dolist (i spis nil)
      (when (equal fio (car i)) (return (cadr i))))))
 
==> task
 
(setq *stud* '((QWE 1992) (wer 1992) (ert 1991) (rty 1993)))
 
==> ((QWE 1992) (wer 1992) (ert 1991) (rty 1993))
 
(task *stud*)
ert
 
==> 1991
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.03.2013, 14:26 3
Вы мыслите на императивном языке. Насколько понимаю, у вас список пар, на первом месте которых фамилия, на втором - год рождения. Поиск нужной пары можно осуществить с помощью функции [url=http://clhs.lisp.se/Body/f_find_.htm]find[/find], указав в качестве параметра :key функцию first (так: :key #'first), извлекающую первый элемент списка (в данном случае фамилию). Функция find вернёт всю найденную пару, так что остаётся взять из неё второй элемент (функция second) и отдать пользователю. Всё вместе займёт несколько строчек.

Подробности только вечером.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
15.03.2013, 14:47 4
Цитата Сообщение от helter Посмотреть сообщение
Вы мыслите на императивном языке.
- не только... Вот другое решение:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun task (spis)
 (let ((fio (read)))
   (remove-if-not #'(lambda (x) (eq fio (car x))) spis)))
 
==> task
 
(task *stud*)
ert
 
==> ((ert 1991))

Поправочка (при условии, что ФИО уникально):

Lisp
1
2
3
4
5
6
7
8
9
10
(defun task (spis)
 (let ((fio (read)))
   (cadar(remove-if-not #'(lambda (x) (eq fio (car x))) spis))))
 
==> task
 
(task *stud*)
ert
 
==> 1991
Добавлено через 5 минут
Цитата Сообщение от helter Посмотреть сообщение
Подробности только вечером.
- все не так сложно...

Добавлено через 10 минут
Или так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun task (spis &optional (fio (read)))
  (cond ((null spis) nil)
        ((eq fio (caar spis)) (cadar spis))
        (t (task (cdr spis) fio))))
 
 
 
 
 
==> task
 
(task *stud*)
ert
 
==> 1991
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
15.03.2013, 16:11  [ТС] 5
Спасибо большое, но не работает. Выдает ошибку. Мне нужно для этого Лиспа, если возможно http://files.mail.ru/5D2D3D7B5... 51D21BAAFE
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
15.03.2013, 17:05 6
Цитата Сообщение от xxxLeonxxx Посмотреть сообщение
Спасибо большое, но не работает. Выдает ошибку.
- какую?

Вот картинка запуска в LispWorks:
Миниатюры
напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде  
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
15.03.2013, 17:27  [ТС] 7
Дело в том что мне нужно для моего Лиспа(ссылку на программу привел выше). А приводе вашего кода в мой Лисп выводит следующую ошибку
напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.03.2013, 19:43 8
Catstail, про императивное мышление я к топикстартеру, просто мы одновременно писали. Я говорил о чём-то таком:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun year (lst)
  (format t "Фамилия > ")
  (let* ((name (read-line))
         (rec (find name lst :key #'first :test #'equal)))
    (if rec
        (format t "Год рождения первого попавшегося по фамилии ~A: ~A."
                (first rec) (second rec))
        (format t "Тютьки, таких нет."))))
 
CL-USER> (year '(("Иванов" 1900) ("Смит" 1800)))
Фамилия > Иванов
Год рождения первого попавшегося по фамилии Иванов: 1900.
Вся "вычислительная" часть уложилась в одну строчку № 4. xxxLeonxxx, обратите внимание на то, как в качестве аргументов передаются функции: #'first в качестве параметра :key говорит, что с заданным name надо сравнивать не элементы списка, а их first-ые части; параметр :test определяет правило сравнения. (Меня не вдохновила идея использовать символы вместо строк, поэтому я по-простецки обозначаю фамилию строкой.) Скучно. Может, гуи забабахаем?

В вашем скриншоте пример Catstail-а не видно, где определена переменная *stud*.

Аллегро - одна из имплементаций диалекта Common Lisp. Все имплементации обязаны следовать стандарту. На что нет стандарта или есть варианты в стандарте - тут на усмотрение разработчика.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
15.03.2013, 19:53 9
Цитата Сообщение от helter Посмотреть сообщение
где определена переменная *stud*.
- виноват:

Lisp
1
(setq *stud* '((QWE 1992) (wer 1992) (ert 1991) (rty 1993)))
Но, как выяснилось, слово stud - нехорошее, поэтому лучше писать:

Lisp
1
(setq *student* '((QWE 1992) (wer 1992) (ert 1991) (rty 1993)))
Добавлено через 2 минуты
Цитата Сообщение от xxxLeonxxx Посмотреть сообщение
А приводе вашего кода в мой Лисп выводит следующую ошибку
Ох... Вводить нужно:

Lisp
1
(setq *student* '((QWE 1992) (wer 1992) (ert 1991) (rty 1993)))
Затем

Lisp
1
2
3
4
(defun task (spis &optional (fio (read)))
  (cond ((null spis) nil)
        ((eq fio (caar spis)) (cadar spis))
        (t (task (cdr spis) fio))))
и, наконец:

Lisp
1
(task *student*)
а потом задать FIO (QWE,ERT и т.д.)
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
15.03.2013, 21:20 10
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(defstruct student name year)
 
(defun group (n)
  (when (> n 0) (cons (make-student :name (read) :year (read))
                      (group (1- n)))))
 
(defun years (w input)
  (loop for a in w
        when (equalp (student-name a) input)
        collect (student-year a)))
 
(defun name-years (w)
 (years w (read)))
 
> (setf 3a (group 3))
ivanov
1994
petrov
1993
ivanov
1995
(#S(STUDENT :NAME IVANOV :YEAR 1994) #S(STUDENT :NAME PETROV :YEAR 1993)
 #S(STUDENT :NAME IVANOV :YEAR 1995))
 
> (name-years 3a)
petrov
(1993)
> (name-years 3a)
ivanov
(1994 1995)
1
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
15.03.2013, 22:49  [ТС] 11
Catstail, к сожалению выводит опять же ту ошибку.


_sg, на вашу программу выводит следующее
напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.03.2013, 01:25 12
Не, коммерческий Аллегро - зачем он любителю, если есть, например, SBCL и Slime? Однако подозреваю, что вы как-то неправильно работаете с REPLом. Раз он всё время ругается, что что-то не определено, похоже, вы не загоняете в REPL (evaluate - что это по-русски?) определения, данные в файле.
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
16.03.2013, 02:05  [ТС] 13
Дело в том что это лабораторная, и не могу понять как ее сделать именно на моем Лиспе. Ссылку на него я приводил ранее. Поэтому и обращаюсь к людям знающим.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.03.2013, 02:15 14
Я ж вам толкую, что Лисп у всех одинаковый. Вы точно умеете с REPLом работать?
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
16.03.2013, 09:15 15
Цитата Сообщение от xxxLeonxxx Посмотреть сообщение
_sg, на вашу программу выводит следующее
Расширь REPL (куда код вводишь) как можно больше (особенно по вертикали), а окно ошибки отодвинь, чтобы мы увидели, что и как ты туда ввел.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
16.03.2013, 09:42 16
Цитата Сообщение от korvin_ Посмотреть сообщение
Расширь REPL (куда код вводишь) как можно больше (особенно по вертикали), а окно ошибки отодвинь, чтобы мы увидели, что и как ты туда ввел.
- самое страшное, что мне приходилось слышать по телефону на эту тему, звучало так: "Ой, я куда-то нажала и у меня все исчезло! И что мне теперь делать?"
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
16.03.2013, 17:45  [ТС] 17
helter, в программе я ориентируюсь очень плохо. Могу только ввести программу, запустить и посмотреть что выводит. И было хорошо если бы мне растолковали что такое REPL.
korvin_, вот полностью что я ввожу и ошибка
напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
16.03.2013, 19:13 18
REPL - Read Evaluate Print Loop

Добавлено через 2 минуты
код программы:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defstruct student name year)
 
(defun group (n)
  (when (> n 0) (cons (make-student :name (read) :year (read))
                      (group (1- n)))))
 
(defun years (w input)
  (loop for a in w
        when (equalp (student-name a) input)
        collect (student-year a)))
 
(defun name-years (w)
 (years w (read)))
REPL:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> (setf 3a (group 3))
ivanov
1994
petrov
1993
ivanov
1995
(#S(STUDENT :NAME IVANOV :YEAR 1994) #S(STUDENT :NAME PETROV :YEAR 1993)
 #S(STUDENT :NAME IVANOV :YEAR 1995))
 
> (name-years 3a)
petrov
(1993)
> (name-years 3a)
ivanov
(1994 1995)
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
16.03.2013, 21:23  [ТС] 19
_sg, вот ваша программа работает, но выводит в ответе name-years. Но все равно это скорее всего будет слишком круто для меня. Мне нужен код программы попроще, на манер того что я приводил в первом сообщении
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
16.03.2013, 22:19 20
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defparameter students '((Ivanov 1994) (Petrov 1993) (Ivanov 1995)))
 
(defun years (w input)
  (loop for a in w
        when (equalp (car a) input)
        collect (cadr a)))
 
(defun name-years (w)
 (years w (read)))
 
> (name-years students)
petrov
(1993)
> (name-years students)
ivanov
(1994 1995)
совсем просто:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun years (w input)
  (loop for a in w
        when (equalp (car a) input)
        collect (cadr a)))
 
(defun name-years (w)
 (years w (read)))
 
> (name-years '((Ivanov 1994) (Petrov 1993) (Ivanov 1995)))
petrov
(1993)
> (name-years '((Ivanov 1994) (Petrov 1993) (Ivanov 1995)))
ivanov
(1994 1995)
0
16.03.2013, 22:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2013, 22:19
Помогаю со студенческими работами здесь

На основе данных входного файла составить список студентов группы, включив следующие данные
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО,...

На основе данных входного файла составить список студентов группы, включив следующие данные
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО,...

Предусмотреть вывод на экран ФИО, № группы студента, сделавшего работу
1. Задания В качестве условия задачи берется задание из 5 лабораторной работы, но работать не с...

Напишите функцию (f N ), которая выдает список всех последовательностей (списков)
Помогите решить задачу на Home Lisp.Напишите функцию (f N ), которая выдает список всех...

Составить список студентов группы со старостой с заданным ФИО
Есть такая структура таблицы. Нужно составить список студентов группы со старостой с заданным ФИО ...

Напечатать список группы и средний балл каждого студента
Прощу помочь с задачей. Дела плохи,а завтра сдавать( Пожалуйста помогите Пробовала,но совсем не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru