Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Позиция элемента и сдвиг в списке
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 09.04.2010, 09:55

Рад приветствовать всех специалистов форума! Началось наконец-то по моей специальности изучение функциональных и логических языков программирования. ЛИСП жутко интересен, но ничего путного у меня не получается. :( Уважаемые гуру, пожалуйста, помогите написать две функции по следующим заданиям:

1. Опpеделите на языке ЛИСП и проверьте работу функции, возвращающей список позиций элемента, заданного параметром x, в списке L. Т.е., при x=4, L=(8 3 4 6 4 1) функция должна возвращать список (3 5)

2. Опpеделите на языке ЛИСП и проверьте работу функции, осуществляющей циклический сдвиг в списке на n элементов вправо. Например, для списка (a s d f g) , n = 3 функция должна вернуть (d f g a s)

Заранее большое спасибо всем, кто уделит внимание.
Ответить с цитированием
  (#2 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 09.04.2010, 12:07

Нумерация позиций элементов списка в LISPе начинается с нуля.
1.
Код:
(defun F (X L &optional (P 0))
  (cond
   ((null L) nil)
   ((equal X (car L)) (cons P (F X (cdr L) (1+ P))))
   (T (F X (cdr L) (1+ P)))))
Вариант:
Код:
(defun F (X L &optional (P 0))
  (if L
   ((lambda (result)
     (if (equal X (car L))
      (cons P result)
      result))
    (F X (cdr L) (1+ P)))))
Ответить с цитированием
  (#3 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 09.04.2010, 15:23

VH, не могу корректно вызвать функцию. Работает только
Код:
(F 3)
, т.е. когда аргумент-список опущен. Видимо указываемый в качестве параметра список нужно квотировать, но это не помогает :baby: Или это потому что я использую muLisp? Да, извиняюсь, забыл добавить, что это обязательное условие, так же как и запрет на использование операторов set и setq в теле функции.
Ответить с цитированием
  (#4 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 09.04.2010, 17:32

Вероятно, в MuLISP нет необязательных параметров. Определите функцию-обертку:
Код:
(defun F0 (lambda (X L) (F X L 0)))
и измените ранее определенную функцию:
Код:
(defun F (lambda (X L P)
  (cond
   ((null L) nil)
   ((equal X (car L)) (cons P (F X (cdr L) (1+ P))))
   (T (F X (cdr L) (1+ P))))))
Ответить с цитированием
  (#5 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 10.04.2010, 09:21

Ничего не изменилось. Может я неправильно вызываю функцию? Как это нужно сделать, чтобы проверить ее работоспособность?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 10.04.2010, 09:49

(F0 4 '(8 3 4 6 4 1))
Ответить с цитированием
  (#7 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 10.04.2010, 10:27

Все верно, я так и писал (видимо что-то все-таки понимаю :D ). Выдает ошибку:
Undefined Function Break: (1+P)
Ответить с цитированием
  (#8 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 10.04.2010, 10:57

В MuLISPе в числе многих лакун - отсутствие одноместных функций прибавления (1+) и вычитания (1-) единицы из аргумента. Замените выражение (1+ P) на (+ P 1) <или что там вместо функции (+)>.
Ответить с цитированием
  (#9 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 10.04.2010, 11:22

Господи, как я мог это пропустить! Точно! VH, спасибо большое, респект тебе, вразумил! Все работает, код верный. Первая функция готова, осталась вторая.
Ответить с цитированием
  (#10 (permalink)) Старый
anonymous anonymous вне форума
Member
 
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
По умолчанию 10.04.2010, 19:06

Цитата:
Рад приветствовать всех специалистов форума! Началось наконец-то по моей специальности изучение функциональных и логических языков программирования. ЛИСП жутко интересен, но ничего путного у меня не получается.
выкиньте нах mulisp. начните с SICP, затем "On Lisp", затем "Practical Common Lisp" ( http://pcl.catap.ru/doku.php?id=%D1%81%D0%...%BE%D0%B4%D0%B0 ), затем "Paradigms of Arifical Intelegence Programming" (PAIP). можно ещё до кучи "Art of Metaobject Protocol" (AMOP)
Ответить с цитированием
  (#11 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 10.04.2010, 20:38

Код:
(defun F (L N)
 (cond
  ((minusp N) L)
  ((zerop N) L)
  (T (F (append (last L) (butlast L)) (1- N)))))
Ответить с цитированием
  (#12 (permalink)) Старый
glyc glyc вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.04.2010
По умолчанию 12.04.2010, 09:46

Еще раз спасибо! Заменил (1- N) на (- N 1) - все работает!
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
r.yevgeniy r.yevgeniy вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.02.2011
По умолчанию 07.02.2011, 18:16

а как тоже самое реализовать только со сдвигом влево? где надо что поменять? подскажите
Ответить с цитированием
  (#14 (permalink)) Старый
DmitryBogachev DmitryBogachev вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.11.2015
По умолчанию Задание на Lisp - 18.11.2015, 22:59

Здравствуйте форумчане, нужна помощь, написать (или у кого уже есть код выложите) программу на Lisp:

Написать программу для циклического сдвига списка на n-1 элементов влево
Ответить с цитированием
  (#15 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 19.11.2015, 19:04

lisp Код:
(defun <r (w n)
  (append (last w n) (butlast w n)))
 
> (<r '(a b c d e) 0)
(A B C D E)
> (<r '(a b c d e) 1)
(E A B C D)
> (<r '(a b c d e) 2)
(D E A B C)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск частоты встречаемости элемента в списке time_to_go_on Prolog 9 22.03.2012 22:41
Удаление предпоследнего элемента в списке Samael Lisp 5 09.05.2011 17:24
Замена элемента в списке. Atton Prolog 17 09.05.2011 00:44
Цикличекий сдвиг элементов в списке Samael Lisp 6 28.04.2011 16:51
проверка наличия элемента в списке. zven_ Prolog 3 12.05.2010 00:08
Переставить два элемента в списке cska_fun Lisp 3 26.11.2009 17:09
Нахождение элемента в списке tigerx2 Prolog 10 26.11.2009 00:11
Замена всех вхождений элемента в списке MUZZ Prolog 4 13.11.2009 13:51
Поиск наибольшего элемента в сложно структурированном списке ТэН Prolog 2 21.01.2009 19:02
номер элемента в списке Ashes Prolog 1 05.06.2008 19:03
Определение максимального элемента в списке Zerо Prolog 5 04.09.2006 18:42
Перестановка элемента в списке AlexF Prolog 2 23.10.2005 21:52



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов