LINUX.ORG.RU
ФорумTalks

2nsav-ng и прочим лиспо-емаксоводам


0

0

как и обещал, я выложил задания по "логическому и функциональному программированию"

делать нужно на лиспе или прологе, я решил выбрать лисп ;) так как я хотя бы знаю какую среду разработки использовать

а вот собственно и сами задания
http://img219.imageshack.us/img219/3736/010la.png
http://img256.imageshack.us/img256/1774/024se.png

зы: никто не хочет мне помочь с решеним этих задач? ;)

★★★★★

s/решеним/решением

JB ★★★★★
() автор топика
Ответ на: комментарий от klalafuda

> хм.. что-то я не понял задачу n2 :-/ что имелось ввиду?

да это же легко

нужно написать генератор случайных чисел _самому_, программма рандомно берет число от 1 до 100, а ты его должен угодать

а первая задача тебя не смущает? ;)

JB ★★★★★
() автор топика
Ответ на: комментарий от JB

> а ты его должен угодать

Кроме ugoday никто такую задачу не решит.

anonymous
()
Ответ на: комментарий от Selecter

> Меня смущает. Как такое реализовать? Что вообще хотят?

ну так программировать ИИ это тебе не хоум паги на питоне писать :)

JB ★★★★★
() автор топика

Немного не понятно причём тут пролог и функциональное программирование, ну и первая задача тоже не очень ясна, хотя моя больная фантазия кое-что придумала. И по некоторым другим задачам я бы задал несколько уточняющих вопросов.

Учи Лисп, и заодно Пролог(hint: у Пролога та же среда разроботки только с другой модой:)), а то так ничего и не узнаешь. Если что непонятно пиши, а так тебе скорее всего никто не поможет.

ЗЫ: По 2 и 5 100% быстро найдёшь решения в интете. 7 задача составлена так, что подразумевается использывание Пролога.

CrazyPit ★★★
()

Второе -- бинарный поиск. Гарантированный ответ за log(n) шагов (логарифм по основаниб два берется). При n=100 решается за 7 шагов.

Слушай JB, а чо лисп это типа клево? Я про ваще не в курсе.=)

Unforgiven
()
Ответ на: комментарий от Unforgiven

> Слушай JB, а чо лисп это типа клево?

ага

в этом сезоне модно использовать емакс и лисп ;) мне это сегодня тот самый быдлогентушник сказал

JB ★★★★★
() автор топика
Ответ на: комментарий от CrazyPit

> Немного не понятно причём тут пролог и функциональное программирование, ну и первая задача тоже не очень ясна, хотя моя больная фантазия кое-что придумала.

если обьяснять на пальцах то вообщем то все понятно, попробую пересказать то что сегодня нам расказал препод

есть запертая комната, главное то что в ней кроме обезьяны, коробки и бананов ничего нет

----------------------------
| О          Б             |   О - обезьяна, Б - бананы и К - коробка
|                          |
|                          |
|                          |
|                          |
|                          |
|                        К |
----------------------------

шаг первый, обезьяна идет по крадчайшему пути к коробке
шаг второй, обезьяна, уже вместе с коробкой опять таки по крадчайшему пути идет к бананам
шаг третий, обезьяна встает на коробку и срывает банан

препод говорил что все как в ЛОГО, надеюсь все помнят что это такое? ;)

вообщем чувствую что все это не для моего разума и мне понадобится дооолго курить доки, потому что _как_ это реализовать на лиспе или прологе я вообще не понимаю

JB ★★★★★
() автор топика
Ответ на: комментарий от CrazyPit

> И по некоторым другим задачам я бы задал несколько уточняющих вопросов.

можно прям тут или на мыло

> ЗЫ: По 2 и 5 100% быстро найдёшь решения в интете

и насчет инета, может посоветуешь русскоязычные ресурсы по лиспу? да и документация не помешала бы, буду курить емакс

JB ★★★★★
() автор топика
Ответ на: комментарий от JB

Из русского SICP http://irc.int.ru/bookshelf/sicp.pdf (это про Схему но это лучшее что есть по русски да и в принципе вряд ли твой препод потребует именно Common Lisp). Вот по декларативному программированию http://softcraft.ru/paradigm/dp/index.shtml тут и про Лисп(тоже Схема) и про Пролог. Из русского по Лиспу помоему ещё есть только Мир Лиспа, но книжка старая и ИМХО не очень хорошая. Ну ещё есть куча лекций, возможно есть и толковые, можешь поискать. А по емаксу - смотри доки на ЛОРЕ, там есть переводы.

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

спасибо, sicp.pdf уже качается

глупый вопрос, а что такое схема? чем она от лиспа отличается?

и насчет емакса, какой лучше использовать? обычный, цвс, или хемакс?

JB ★★★★★
() автор топика

Вот мой вариант обезьяней запарки на схеме:

;; Monkey's game :)
(define (write-line str)
(write str)
(newline))

(define (logo)
(write-line "4) Goto box 3) Move box 2) Jump on box 1) Got bananas"))

(define (get-action)
(read))

(define (iterate action previous count)
(if (and (and (= count 3) (= action 1)) (= (+ action 1) previous))
(write-line "You got it, baby!")
(if (= count 3)
(write-line "Fuck off, asshole!")
(iterate (get-action) action (+ count 1)))))

(define (play-monkey)
(logo)
(iterate (get-action) 0 0))

(play-monkey)

anonymous
()
Ответ на: комментарий от JB

Хм... Ну с абизьяном, как я понимаю, подразумеваецца нарисовать некий граф, вершины которого соотвеццвуют различным положениям абизьяна и коробки, а рёбра графа - возможным перемещениям абизьяна и коробка. Одна из вершин графа - будет исходной (абизьян и коробка на первоначальных местах), одна из вершин - требуемая (коробка под бананом, абизьян на коробке). Нужно по рёбрам графа попасть из исходной в требуемую.

Ron
()
Ответ на: комментарий от Ron

> Хм... Ну с абизьяном, как я понимаю, подразумеваецца нарисовать некий граф

неа

имхо нужно написать алгоритм

JB ★★★★★
() автор топика

С английским улыбнуло. AFAIK, синтаксис английского языка как раз для подобных задач считаецца экстремально сложным.

Ron
()
Ответ на: комментарий от JB

Емакс бери любой. Когда говорят "Лисп" чаще подразумевают диалект "Common Lisp", а не "Scheme", хотя схема это тоже диалект лиспа, очень простой и академичный, лучше подходит для обучения, но ИМХО хуже для реальных приложений, в твоё случае вполне подойдёт. В принципе чтобы поиграться со схемой, можно установить DrScheme, для начала. Но ещё учти что для Common Lisp есть очень хорошая и навороченная среда разработки SLIME(надстройка для емакса), для scheme вроде бы нет ничего такого уровня, хотя я могу и ошибаться.

CrazyPit ★★★
()
Ответ на: комментарий от anonymous

Что-то мне кажеться это не то что нужно. Помоему компьютер должен сам найти путь обезьянки, а не предоставлять это человеку.

CrazyPit ★★★
()

6 - туда же - оптимальный путь на взвешенном графе.

Ron
()
Ответ на: комментарий от CrazyPit

>Помоему компьютер должен сам найти путь обезьянки, а не предоставлять это человеку.

По-моему, мы парим себе мозги (ударение на первый слог)=). "Быдлогентушник"...дайка подумать...уже не Тузя ли?!

Unforgiven
()
Ответ на: комментарий от JB

>ну так программировать ИИ это тебе не хоум паги на питоне писать :)

JB, ты не гордись слишком сильно. Всегда найдётся тот, кто умнее тебя.

Selecter ★★★★
()
Ответ на: комментарий от Ron

>Так вот как раз тогда всё и сводится к написанию алгоритма пути поиска на графе (Кнут в помощь).

Поиск в глубины шьешь, начальник? Алгорит Форда-Беллмана?

Unforgiven
()
Ответ на: комментарий от Unforgiven

А х/з. Я это лет 16 назад учил - уже забыл. Всегда можно в книжках посмотреть если что...

Ron
()
Ответ на: комментарий от Ron

> С английским улыбнуло. AFAIK, синтаксис английского языка как раз для подобных задач считаецца экстремально сложным.

русский еще сложнее

JB ★★★★★
() автор топика
Ответ на: комментарий от Unforgiven

> "Быдлогентушник"...дайка подумать...уже не Тузя ли?!

нет, тузя в питере

просто в моем институте стало модно ставить генту и орать что она рулиз, теперь эта мода перекинулась на емакс

JB ★★★★★
() автор топика
Ответ на: комментарий от Selecter

> JB, так это каждый школьник сможет! Не на лиспе, конечно :-)

то что предложил анонимус это не то наверное, слишком уж просто

JB ★★★★★
() автор топика
Ответ на: комментарий от JB

>просто в моем институте стало модно ставить генту и орать что она рулиз

в моем тоже. Особенно в общаге. Дескать, канал у нас широкий, халявный...

Unforgiven
()
Ответ на: комментарий от JB

> русский еще сложнее

Не факт. Я не лингвист, но, имхо, например, отсутствие инфлекции и практически свободный переход слов из одной части речи в другую - для компьютерного анализа это как раз усложнение, а не упрощение.

Ron
()
Ответ на: комментарий от JB

> и насчет емакса, какой лучше использовать? обычный, цвс, или хемакс?

Для новичка лучше всего cvs'ный. Главное, чтоб снапшот без глюков был, но это почти всегда так. В нем нажимаешь C-u C-h t russian и вперед навстречу светлому будущему.

nsav-ng
()
Ответ на: комментарий от nsav-ng

> Для новичка лучше всего cvs'ный.

а снапшоты где нибудь есть? а то чекаутить из cvs по диалапу долго и дорого

JB ★★★★★
() автор топика
Ответ на: комментарий от JB

Есть пакеты для дебиана.

http://www.emacswiki.org/cgi-bin/wiki/EmacsCvsAndDebian

Больше не знаю. Попроси людей из богатых стран чекануть и выложить где-то. У меня сейчас. к сожаленью, почти нет денег на счету, не смогу выложить. :(

nsav-ng
()
Ответ на: комментарий от CrazyPit

Значит, будем искать SLIME. Меня Лисп торкнул неподетски :))

shuthdar ★★★
()
Ответ на: комментарий от Ron

Собственно, в английском есть киллер-фича для компьютерной обработки -- порядок слов. Да, знаменитое time flies like an arrow даст два парсинга. Но тут уж мало что попишешь. Кстати, приятнее всего ложбан парсить :) для него уже и готовое что-то есть.

Кстати, про обработку натурального языка написано у Пола нашего Грехема в On Lisp. Догадайтесь, на каком языке :)

anonymous
()

Блин долбание ханои. Решил вот отвлечься от ботанья и написать
Ханойские Башни. Написал потом посмотрел решение в нете, а оно-то 
в несколько строк. Правда там нельзя посмотреть каждую отдельную комбинацию. Только "перожить с n-ой на k-ую".

(defun dohanoi(n to from u)
 (when (> n 0)
   (dohanoi (- n 1) u from to)
   (format t "move ~D --> ~D~&" from to)
   (dohanoi (- n 1) to u from))))

(defun hanoi(n) (dohanoi n 3 1 2))

Моё решение (хреновое:) кто-нибудь может подскажет как прощще  
реализовать перемещение с одной палки на другую без деструктивных 
функций):


;; f - откуда составить
;; t - куда составить
;; v - временная палка
;; N - число колец.

;; Составить ханойскую башню из f в t это значить составить ханойскую 
башню из N-1 колец из f в v перенести кольцо с f в t и соствить ханойскую башню из N-1 колец из v в t.


(defun make-towers (source)
  (list (rest (assoc 0 source))
	(rest (assoc 1 source))
	(rest (assoc 2 source))))

(defun top (tower) (first tower))
(defun bottom (tower) (rest tower)) 
(defun put (blk tower) (cons blk tower))

(defun move-one (towers from to temp)
  (print-towers towers)
  (flet ((tower (number)
	   (nth number towers)))
    (make-towers (list
		  (cons to (put (top (tower from))
				(tower to)))
		  (cons from (bottom (tower from)))
		  (cons temp (tower temp))))))

(defun hanoi-towers (towers from to temp n)
  (print-towers towers)
  (if (= n 1)
        (move-one towers from to temp)
      (hanoi-towers
       (move-one
	(hanoi-towers towers from temp to (1- n))
	from to temp)
       temp to from (1- n))))

(defun run-hanoi-towers (n)
  (print-towers
   (hanoi-towers (make-towers `((0 . ,(loop for i from 1 to n collect i)) (1) (2)))
		 0 2 1 n)))



CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

ЗЫ: красивый вывод башенек - домашнее задание.

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

Не пойму, при чем функциональное и логическое программирование к этим задачам? Задачи, конечно, интересные, но все же оффтопичные.

nsav-ng
()
Ответ на: комментарий от nsav-ng

Ну по крайней мере 7 задача сформулирована так как будто её нужно решать на прологе. Можно ведь решить в функц. стиле - так что пусть мучаются, преподу влом придумывать новый задачи:) У нас вообще вторая лаба по функц. проганью - составить список фактариалов от 1 до N или сделать реверс списка. Эти хоть поинтереснее.

CrazyPit ★★★
()
Ответ на: комментарий от nsav-ng

Там нет, но с push/pop было бы намного короче... Мне интересно можно ли в функциональном стиле это эллегантнее записать.

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

> Мне интересно можно ли в функциональном стиле это эллегантнее записать

Самый элегантный вариант -- это первый. Еще и с хвостовой рекурсией :)

nsav-ng
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.