Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Common Lisp (бывший коварный ктото) / 25 сообщений из 132, страница 1 из 6
02.01.2009, 23:19
    #35743444
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Приколитесь над примером:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
(defun mystery (x y)
  (if (null y)
      nil
      (if(eql(car y) x)
          0 
         (let((z (mystery x (cdr y))))
           (and z (+ z  1 ))))))
После таких примеров особо остро чувствую собственную тупость :((
...
Рейтинг: 0 / 0
05.01.2009, 15:29
    #35744817
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Блин, почти до самого конца было понятно что там творится. А что эта функция должна делать?
...
Рейтинг: 0 / 0
05.01.2009, 15:31
    #35744818
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
zloy denБлин, почти до самого конца было понятно что там творится. А что эта функция должна делать?

Вы не поняли? ;)
...
Рейтинг: 0 / 0
05.01.2009, 15:33
    #35744819
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
SQL_Lamer,

Мне понравилось, как он and использует - как проверку на nil
...
Рейтинг: 0 / 0
05.01.2009, 15:40
    #35744826
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
На самом деле - пример простой, теперь понял.
После си - подобных языков тяжело привыкать просто.
И еще непривычно, что хвостовая рекурсия превалирует над итерациями.
Обычно ведь как во всех учебниках?
На рекурсию одна страница с дебильным примером на Фибоначи.
Но не в Лисп.
...
Рейтинг: 0 / 0
05.01.2009, 15:44
    #35744830
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
SQL_Lamer,

а разве тут рекурсия хвостовая?
...
Рейтинг: 0 / 0
05.01.2009, 15:46
    #35744834
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Похоже что возвращает номер элемента x в списке y. Идея листать список через первый элемент и рекурсивную обработку конца понятна, сложно было разобраться что там делает and . Как я понял, он листает список до конца постепенно увеличивая счетчик, и если найдет необходимый элемент, то возвращает z, который будет служить как счетчик вызовов функции(и по совместительству номером элемента в списке). Если же элемент не будет найден, то по цепочке вернутся nil и ответ тоже будет nil. Не догадался что функцию and использовал как проверку на nil
...
Рейтинг: 0 / 0
05.01.2009, 15:46
    #35744835
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
beluginSQL_Lamer,

а разве тут рекурсия хвостовая?

Тут нет.
По этому это не очень эффективная функция.
Я пример к тому привел, что язык красивый.
...
Рейтинг: 0 / 0
05.01.2009, 15:53
    #35744844
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Меня больше впечатлило это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
(defun memoize (fn)
   (let ((cache (make-hash-table :test #'equal)))
      #'(lambda (&rest args)
         (multiple-value-bind (val win) (gethash args cache)
            (if win
               val
               (setf (gethash args cache)
                      (apply fn args)))))))
Эта функция принимает любую функцию с произвольным количеством входных параметров и одним выходным и возвращает кешированный эквивалент. 8мь строк, а каков эффект
...
Рейтинг: 0 / 0
05.01.2009, 15:56
    #35744849
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
zloy den,

Там много что впечатляет.
Но я еще до таких функций не дошел.
Стараюсь изучать последовательно.
...
Рейтинг: 0 / 0
05.01.2009, 15:59
    #35744852
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
По-моему, книгу будет проще перечитать еще раз, т.к. в самом начале даются такие зубодробительные примеры, которые проще пропустить не сильно разбираясь, а потом с большим багажом знаний все станет понятно
...
Рейтинг: 0 / 0
05.01.2009, 22:49
    #35745211
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Игры разума... блин...
...
Рейтинг: 0 / 0
06.01.2009, 02:06
    #35745316
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
zloy denПо-моему, книгу будет проще перечитать еще раз, т.к. в самом начале даются такие зубодробительные примеры, которые проще пропустить не сильно разбираясь, а потом с большим багажом знаний все станет понятно

Раньше как вы подходил к этому вопросу :)
Читаю хорошую книгу. Попадается что - то реально тяжелое для понимания - думаю, потом разберусь, когда перечитывать буду. Но до перечитывания ни разу дело у меня не дошло :)
Так что ваш способ мне не подходит :))
...
Рейтинг: 0 / 0
09.01.2009, 15:25
    #35748773
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
SQL_Lamer пишет:

Он Грем, а не Грехем.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.01.2009, 15:29
    #35748783
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
SQL_Lamer пишет:

> Мне понравилось, как он and использует - как проверку на nil

Это ж стандартная идиома.

И не только лиспа.

(and a b c d) возвращает первый nil или d

(or a b c d) возвращает первый (not (null _) или d

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.01.2009, 15:30
    #35748784
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
SQL_Lamer пишет:

> На самом деле - пример простой, теперь понял.
> После си - подобных языков тяжело привыкать просто.

Кто тебе запрещает написать точно так же на С ?

> И еще непривычно, что хвостовая рекурсия превалирует над итерациями.
> Обычно ведь как во всех учебниках?

Здесь нет хвостовой рекурсии.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.01.2009, 15:31
    #35748786
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
MasterZiv
SQL_Lamer пишет:

> Мне понравилось, как он and использует - как проверку на nil

Это ж стандартная идиома.

И не только лиспа.

(and a b c d) возвращает первый nil или d

(or a b c d) возвращает первый (not (null _) или d



В .Net однако так не принято(хоть и можно)
Говорю - же, привыкать не просто.
Другой стиль.
...
Рейтинг: 0 / 0
09.01.2009, 15:32
    #35748788
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
MasterZiv

Здесь нет хвостовой рекурсии.



Да, я и сам про это уточнил.
...
Рейтинг: 0 / 0
09.01.2009, 15:55
    #35748831
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
MasterZiv
И не только лиспа.

(and a b c d) возвращает первый nil или d

(or a b c d) возвращает первый (not (null _) или d


Здесь - ничего удивительного. Обычная оптимизация. Вот если-бы правила де-Моргана применялось автоматически - другое дело.
...
Рейтинг: 0 / 0
09.01.2009, 20:35
    #35749188
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
mayton пишет:

> Здесь - ничего удивительного. Обычная оптимизация. Вот если-бы правила
> де-Моргана применялось автоматически - другое дело.

Это не булевские функции.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.02.2009, 11:57
    #35805323
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
Я вот сдуру засиделся до 4х утра в выходные. Писал программу расстановки ферзей. Честно говоря код не шибко нравится, но для первого раза сойдет. Может у кого есть идеи насчет оптимизации?
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
(defun test-queen(place previous-lst)
  (let ((cur-row (+  1  (length previous-lst))) (counter  1 ))
       (dolist (i previous-lst)
         (if (or
                  (= place i)
                  (= place (+ i (- cur-row counter)))
                  (= place (- i (- cur-row counter))))
             (return)
             (setf counter (+  1  counter))))
       (if (= counter cur-row) t nil)))
(defun put-queen(start-pos max-place previous-list)
  (let ((finded)(num))
   (do ((i start-pos ( 1 + i)))
       ((> i max-place))
    (when (test-queen i previous-list)
        (setf finded t)
        (setf num i)
        (return)))
   (if finded (append previous-list (list num))  nil))))

(defun ncheck-remove(max lst)
  (let ((tmplst lst))
     (do ((i  0 ))
      ((>= max (get-last+ 1  tmplst)))
    (setf tmplst (butlast tmplst)))
  tmplst))

(defun get-last+ 1  (lst)
  (if (null lst)  0 
      (+  1  (car (last lst)))))

(defun put-queens (max-nums)
  (let ((cnt  0 ))
    (let (result-list temp-list)
      (do ((i  1 ))
          ((=  0  i))
        (setf temp-list (put-queen i max-nums result-list))
        (when (null (null temp-list))
          (setf i  1 )
          (setf result-list temp-list))
        (when (null temp-list)
          (setf result-list (ncheck-remove max-nums result-list))
          (setf i (get-last+ 1  result-list))
          (setf result-list (butlast result-list)))
        (when (= max-nums (length result-list))
          (print result-list)
          (incf cnt))))
    (print cnt)))
...
Рейтинг: 0 / 0
09.02.2009, 13:30
    #35805592
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
zloy denПисал программу расстановки ферзей.
может так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
static pos[ 8 ],nr:= 1 
func main; return f8( 8 , 1 )
func f8(n,lin)
  return if(n< 1 ,out(),if(lin> 8 ,.f.,if(f1(lin, 8 -n+ 1 ) .and. f8(n- 1 , 1 ),.t.,f8(n,lin+ 1 ))))
func f1(lin,col)
  local i
  for i= 1  to col- 1 
    if pos[i]=lin .or. abs(lin-pos[i])=abs(col-i); return .f.; end
  end
  pos[col]=lin
  return .t.
func out
  local i,j
  ?nr++; ?''
  for i= 1  to  8 ; for j= 1  to  8 ; ??if(pos[j]=i,'X ','. '); end; ?''; end
  return .f.
...
Рейтинг: 0 / 0
09.02.2009, 13:59
    #35805693
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
_мод

А что за язык? Перл? В приведенном коде не нравится, что четко зафиксирован размер доски. К тому же не совсем разобрался, но похоже что код проверяет вообще все варианты. У меня реализован поиск с возвратом
...
Рейтинг: 0 / 0
09.02.2009, 14:26
    #35805775
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
zloy denА что за язык? Перл? В приведенном коде не нравится, что четко зафиксирован размер доски. К тому же не совсем разобрался, но похоже что код проверяет вообще все варианты. У меня реализован поиск с возвратом
Это клиппер :). Это и есть поиск с возвратом т.е. поиск до первой ошибки и отскок назад - ищет все 92 варианта
...
Рейтинг: 0 / 0
09.02.2009, 14:37
    #35805807
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Common Lisp (бывший коварный ктото)
_модzloy denА что за язык? Перл? В приведенном коде не нравится, что четко зафиксирован размер доски. К тому же не совсем разобрался, но похоже что код проверяет вообще все варианты. У меня реализован поиск с возвратом
Это клиппер :). Это и есть поиск с возвратом т.е. поиск до первой ошибки и отскок назад - ищет все 92 варианта

По-моему, синтаксис у него страшнее чем в лиспе
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Common Lisp (бывший коварный ктото) / 25 сообщений из 132, страница 1 из 6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]