Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Присваивание и сложение в прологе
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Zerо Zerо вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 01.09.2006
По умолчанию 06.09.2006, 23:21

Есть пример, определения символа в строке:
Код:
findchar(S,C,1) if
    frontchar(S,C,_), !.
  findchar(S,C,N) if
    frontchar(S,_,S1),
    findchar(S1,C,N1),
    N1<>0,!,
    N=N1+1.
  findchar(_,_,0).
Не как не пойму, каким образом в строке
Код:
findchar(S1,C,N1),
в аргументе N1, оказываются какие либо значения.
И ещё, за счёт чего происходит сложение в переменной N???
Точнее я понял, что за счёт строки N = N + 1, но почему если смотреть в пошаговом режиме, то переход к ним происходит в конце после выполнения findchar(S,C,1)
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 07.09.2006, 22:13

Цитата:
Не как не пойму, каким образом в строке
Код:
findchar(S1,C,N1),
в аргументе N1, оказываются какие либо значения.
В результате рекурсивных вычислений. Как они осуществляются в Прологе, посмотрите, например, в книге Клоксина и Меллиша, там все понятно написано. Ее можно скачать здесь на форуме (см. тему Библиотека по Прологу).
Цитата:
И ещё, за счёт чего происходит сложение в переменной N
Складываются два конкретных значения, и все.
Цитата:
но почему если смотреть в пошаговом режиме, то переход к ним происходит в конце после выполнения findchar(S,C,1)
Вычисления для findchar(S1,C,N1) завершаются с помощью первого правила.
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,910
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 08.09.2006, 11:57

Цитата:
Не как не пойму, каким образом в строке
findchar(S1,C,N1),
в аргументе N1, оказываются какие либо значения.
В Вашем первом клозе:
findchar(S,C,1) if frontchar(S,C,_),!.
переменной N присваивается единица (по проложьи говоря - происходит унификация переменной N с единицей). Потом эта единица начинает инкрементироваться с помощью
N=N1+1.
столько раз, сколько раз вызывался второй клоз. А он вызывался столько раз, сколько раз искомый символ не был успешно сопоставлен с отрываемым символом.

Цитата:
И ещё, за счёт чего происходит сложение в переменной N???
Точнее я понял, что за счёт строки N = N1 + 1, но почему если смотреть в пошаговом режиме, то переход к ним происходит в конце после выполнения findchar(S,C,1)
Переход к строке N = N1 + 1 происходит после выполнения findchar(S,C,1) потому, что во втором клозе findchar вызывает сам себя ДО строки N = N1 + 1. Пока не выполнится первый клоз, строка N = N1 + 1 не начнёт работать.
Ответить с цитированием
  (#4 (permalink)) Старый
Zerо Zerо вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 01.09.2006
По умолчанию 12.09.2006, 19:20

Аааа. Я понял, понял, понял... БИГ-СЕНКС!!!
Это единица то первая оказывается присваевается, а я думал, что это чисто для обработки частного случая когда первый символ есть определяемый, и не уделил особого внимания ей.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение двоичных чисел Robomozg Lisp 15 14.12.2011 15:52
Сложение строк ShaggonB Pascal 1 11.12.2011 22:30
умножение как повторяющееся сложение. SETH Prolog 3 16.05.2011 20:51
Поразрядное сложение N+1 sv-folder Алгоритмы 1 14.12.2009 12:24
Рекурсивное сложение _Dark_ Prolog 6 08.11.2009 13:28
Сложение по модулю два как это сделать ravmad С/С++ 1 02.05.2009 14:26
сложение матриц BOING Prolog 4 16.05.2008 13:50
Сложение строк в таблице Dimson C++ Builder 14 20.04.2006 21:26
Присваивание массивов друг другу Alter Pascal 2 18.12.2005 15:45
Сложение Extended как реализовать ALLex Delphi 4 16.11.2005 12:09
Присваивание кнопке значения ID_FILE_OPEN Monah IRH Visual C++ 16 24.08.2005 21:01
Присваивание значение переменной Skywalker-cyb Visual C++ 2 06.01.2003 20:25



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов