Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из Лиспа в Пролог, ПОМОГИТЕ!!!!!!!!!!!!&# 
:(
    Опции темы
AlexSas
Дата 10.12.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.11.2009

Репутация: нет
Всего: нет



Здравствуйте!

Я написал программу на Лиспе для вычисления степени-множества (и, благодаря помощи VH, который сделал мне сортировку и рекурсивную версию, успешно ее сдал). Теперь препод дал задание перевести эту программу на Пролог. Помогите пожалуйста!!!!!!!!!!!!!!!!

(defun binary (bin &optional temp_1 res_b)
    (loop
      (cond
        ((= bin 0) (return (setq res_b (list 0)))))
      (cond
        ((= bin 1) (return (reverse (append res_b (list 1))))))
      (setq temp_1 bin)
      (cond
        ((null(oddp temp_1)) (setq res_b (append res_b (list 0))) (setq bin (truncate bin 2))))
      (cond
        ((oddp temp_1) (setq res_b (append res_b (list 1))) (setq bin (truncate bin 2)))) ))
 
(defun stepen (str &optional s1 s2 s3 res_temp res_s)
    (setq s1 1)
    (loop
      (cond
        ((= s1 (expt 2 (length str))) (return (cons nil res_s))))
      (setq s2 (reverse (binary s1)))
      (setq s3 0)
      (setq res_temp nil)
      (loop
        (cond
          ((= s3 (length s2)) (return (setq res_s (append res_s (list res_temp))))))
        (cond
          ((= (nth s3 s2) 1) (setq res_temp (append res_temp (list (nth s3 str))))))
        (cond
          ((< s3 (length s2)) (setq s3 (+ s3 1)))) )
      (cond
        ((< s1 (expt 2 (length str))) (setq s1 (+ s1 1)))) ))

Функция binary переводит числа из десятичной системы в двоичную. Функция stepen строит степень-множество. Если будет нужно, могу сделать построчные комментарии....

Это сообщение отредактировал(а) AlexSas - 10.12.2009, 19:09
PM MAIL   Вверх
AlexSas
Дата 14.12.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.11.2009

Репутация: нет
Всего: нет



Я перевел программу, по логике все правильно, binary работает как надо (то есть переводит десятичные числа в двоичные, младший бит слева). Но stepen не работает, пишет какую-то ошибку (то есть вводим: stepen. [1,2,3]. - должно получиться множество-степень). Пожалуйста, помогите отладить!!!!!!!!!!!!!!

:- dynamic(mnog/1, t/1, s/1, s1/1, s2/1, s3/1, res_t/1).

binary(B) :-
    retractall(t(_)), retractall(s(_)),
    assertz(t(B)), assertz(s([])), K=[], fail;
    repeat, (
      t(N),
      N1 is N // 2,
      N2 is N mod 2,
      retract(t(N)),
      assertz(t(N1)),
      s(P),
      append(P,[N2],K), retractall(s(_)), assertz(s(K)),
      N == 1, assertz(s(K)), !; fail).

stepen :-
    write('Введите множество:'), nl,
    read(ST), nl,
    retractall(mnog(_)), assertz(mnog(ST)),
    retractall(s1(_)), retractall(s2(_)), retractall(s3(_)), retractall(res_t(_)),
    assertz(s1(1)), assertz(res_t([])), length(ST,M), P is round(2**M), fail;
    repeat, (
      s1(COUNT),
      COUNT == P, res_t(T), append([[]],T,R), write('Множество-степень:'), nl, write®, !;
      binary(COUNT), s(COUNT_2), write(COUNT_2),
      retractall(s2(_)), assertz(s2(COUNT_2)),
      retractall(s3(_)), assertz(s3(1)),
      finally,
      COUNT < P, COUNT_N is COUNT+1, retractall(s1(_)), assertz(s1(COUNT_N)), fail).

finally :-
    repeat, (
      s3(S_3), s2(S_2), length(S_2,M_f), M_fn is M_f+1,
      S_3 == M_fn, !;
      mnog(Sf),
      nth(S_3,S_2,NT), nth(S_3,Sf,NR),
      NT == 1, res_t(T), append(T,[NR],RT), retractall(res_t(_)), assertz(res_t(RT));
      S_3 < M_fn, S_3N is S_3+1, retractall(s3(_)), assertz(s3(S_3N)), fail).

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.