powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Common Lisp (бывший коварный ктото)
25 сообщений из 132, страница 1 из 6
Common Lisp (бывший коварный ктото)
    #35743444
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приколитесь над примером:
Код: 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
Common Lisp (бывший коварный ктото)
    #35744817
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, почти до самого конца было понятно что там творится. А что эта функция должна делать?
...
Рейтинг: 0 / 0
Common Lisp (бывший коварный ктото)
    #35744818
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy denБлин, почти до самого конца было понятно что там творится. А что эта функция должна делать?

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

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

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

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

Тут нет.
По этому это не очень эффективная функция.
Я пример к тому привел, что язык красивый.
...
Рейтинг: 0 / 0
Common Lisp (бывший коварный ктото)
    #35744844
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня больше впечатлило это:
Код: 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
Common Lisp (бывший коварный ктото)
    #35744849
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy den,

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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



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

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

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


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

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

Это не булевские функции.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Common Lisp (бывший коварный ктото)
    #35805323
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот сдуру засиделся до 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
Common Lisp (бывший коварный ктото)
    #35805592
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Common Lisp (бывший коварный ктото)
    #35805693
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод

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

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


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