![]() |
|
Модераторы: Poseidon |
![]()
|
|
| REZiaMIX |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Scheme:
Есть такая задачка
Не пойму как проводить операции со списком. Т.е по идее алгоритм такой:
Как обращаться к отдельным элементам списка по индексу? Как возвратить произвольный список?(знаю что возвращается переменная , с которой обращались посл. раз) Все следующие задачи похожи , прошу помощи. Заранее огромное спасибо -------------------- ![]() |
||||
|
|||||
| MystDeim |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
Сам недавно начал изучать ским, обращаться по индексу вроде нельзя. А пробегать список можно так:
То есть car отрезает первый элемент, cdr остальные. Вот функция для доступа к n- элементу списка ( из книжки Харольд Абельсон "Структура интерпретация компьютерных программ")
Надеюсь помог --------------------
Учебные материалы для студентов http://studlab.org |
||||
|
|||||
| VH_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 1 Всего: 11 |
Изложение задачи на русском языке:
«Записать функцию с именем lessthen, первым аргументом которой является список lis, а вторым аргументом - атом k. Функция возвращает новый список, который содержит те элементы из списка lis, которые (в некотором смысле - VH.) меньше чем (значение - VH.) k.» Таким образом, про индексы элементов списка речи не идет. Уточнение о том, что список «новый» важно, так как есть структуроразрушающие функции, которые в состоянии покорежить и вернуть исходный (физически) список. Если атом k не является числом, либо в списке lis есть нечисловые элементы (например, списки), то каким образом в таких случаях определить отношение "меньше"? Вариант для списка чисел lis и числа k (обычный LISP):
|
||||
|
|||||
| MystDeim |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
Вы привели пример на коммон лисп, автор темы просил на скиме...
--------------------
Учебные материалы для студентов http://studlab.org |
|||
|
||||
| REZiaMIX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Спасибо , буду разбираться. По индексу хотел обратиться , чтобы обойти все по кругу , потом сравнить.
Да , с лиспа в схему переведу врядли Ищу спеца скима.... Это сообщение отредактировал(а) REZiaMIX - 8.11.2008, 19:36 -------------------- ![]() |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 1 Всего: 11 |
>MystDeim
Автор темы в идее алгоритма говорит «...текущая позиция...» (то есть положение в списке) и «...значение текущей позиции...» (то есть сам элемент списка). В задании же предлагается сравнивать с данным атомом сами элементы списка, а не их позиции. Теперь по делу: «...как проводить операции со списком...» Единственная «операция», которая есть в LISPе - это вызов функции (и никаких других нет). Следовательно, чтобы что-то сделать со списком, необходимо вызвать подходящую функцию, аргументом которой является список. Например, «...как обращаться к отдельным элементам списка по индексу...» В LISPе есть функция (nth индекс список), аргументами которой являются порядковый номер (начальный номер равен 0!) и список, и которая возвращает элемент данного списка, находящийся в позиции с данным порядковым номером (либо NIL, если данный список слишком короткий). «...как возвратить произвольный список...» Так как в LISPе есть только вызов функции, то каждый вызов функции возвращает значение. Поэтому при вызове функции на месте аргумента можно (и нужно, так как других средств нет) сделать вызов той функции, которая вернет необходимое значение (суперпозиция функций). Значение, возвращенное самым внешним вызовом функции, предоставляется пользователю. «...знаю что возвращается переменная , с которой обращались посл. раз...» В корне неверное утверждение. Во-первых, в LISPе понятие переменной (то есть ячейки памяти, содержащей значение) является излишним - без "переменных" вполне можно обойтись. Во-вторых, при вызове функции значения аргументов передаются по значению, то есть с формальным параметром связывается значение аргумента, и любые действия внутри функции (кроме экзотических структуроразрушающих) не могут изменить сам аргумент. PS. А чего такого нет в Scheme, что есть в обычном LISPе? Разве в Scheme не переводится буквально «по шаблону»? >MystDeim А как Вы определили, что это CommonLISP (а не Xlisp, не AutoLISP, не InterLISP)? |
|||
|
||||
| MystDeim |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
VH_,
Вот по этому, хотя не спорю, возможно это и не коммон лисп. Сам имел дело только со скимом... поглядывал еще на Arc Lisp В скиме чуть по другому скобки расставлены и объявление пишеться: defun -> define, скорее всего есть еще отличия. Похоже с Вами лучше не спорить, столько всего умного написали, я всё-таки не спец по лиспу, изучить его решил только из спортивного интереса. Посоветуйте книжек лучше по лиспу, кроме этой Харольд Абельсон "Структура интерпретация компьютерных программ" (там как раз много примеров на скиме) нормального ничего не нашел... --------------------
Учебные материалы для студентов http://studlab.org |
||||
|
|||||
| REZiaMIX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Не подскажете как эту задачу решить на Scheme?, никак на могу придумать(( -------------------- ![]() |
|||
|
||||
| adejneka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: 2 Всего: 11 |
http://www.cliki.net/Online%20Tutorial http://www.cliki.net/Lisp%20books |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 1 Всего: 11 |
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |