LINUX.ORG.RU

Автомат без входного алфавита


0

1

Вопрос собственно в том, возможен ли сабж?

Например:

(define automate (let ((state #f)) (lambda() (if state (set! state #f) (set! state #t)) (write state))))

(automate)
(automate)
(automate)
; #t#f#t

Рботает как автомат, но входной алфавит ему не нужен. Это не соответствует определению автомата на вике. Это автомат?


Ответ на: комментарий от hateyoufeel

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

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

А, вот так даже... Это вынос мозгов, натуральный:) Надо переварить...

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

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

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

Ваше определение соответствует такому вот определению:


(define automate (let ((state #f)) (lambda() (if state (set! state #f) (set! state #t)) (write state))))

(define global-automate
  (lambda(name)
    (define local-automate automate)
    (if (eq? name 'automate)
      (local-automate)
      (write 'wrong-name))))

(global-automate 'automate)
(global-automate 'automate)
(global-automate 'automate)

;#t#f#t

И тут, как раз ничего удивительного нет, всесоответствует. Но вопрос о том, является ли просто automate (а не global-automate) автоматом, остается открытым.

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

А что такое по-твоему вызов (automate)? Можно сказать, что эта функция вместе с REPL - это автомат. Без REPL это просто черный ящик, не принимающий никакой ввод (считать ли это автоматом - вопрос не очень интересный). Ты же подаешь ввод, хоть и через интерпретатор, по его протоколу, но всё равно этот ввод - это и есть входной символ. В твоем случае один.

global-automate - то же самое, просто протокол ввода другой.

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

Все зависит от того, откуда на это смотреть. Сама по себе такая функция автоматом по определению не является, но с другой стороны программа в целом — является, т.к. сам вызов функции можно рассматривать как передачу символа в автомат (программу).

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

но с другой стороны программа в целом — является

Ну надо же, какие знатные капитаны из школьнегов подрастают. Да ты просто самый капитанский капитан, изо всех капитанов. Уроки выучил?

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

Братюнь, нам на завтра ничего не задавали, ты забыл?

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

Но вопрос о том, является ли просто automate (а не global-automate) автоматом, остается открытым.

Является. Просто ф-ция — это очень х*евая абстракция для прояснения этого вопроса, она слишком много скрывает в своей реализации.

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

Рботает как автомат, но входной алфавит ему не нужен.

не верна. Как и (почти) все, что тебе писали комментаоры выше.

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

Поэтому, твой автомат, в данном случае, получает на вход алфавит, состоящий из одного символа: state.

Что за идиотизм пытаться притянуть за уши тонкости реализации? Состояние автомата по определению хранится в самом автомате, а не передается вместе/вместо алфавита.

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

Состояние автомата по определению хранится в самом автомате

оно и так храниться, потому состояние - это абстракция, не важно , откуда оно берется.

а не передается вместе/вместо алфавита.

Это эквивалентно.

anonimous
()

Это автомат?

Да. Такой автомат называется автономным.

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от anonimous

оно и так храниться, потому состояние - это абстракция, не важно , откуда оно берется.

Верно. Но тут же ты притягиваешь за уши к абстракции одну из возможных реализаций:

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

Семантически у ТС имеется штуковина без входного алфавита, магически сохраненное состояние и выходной алфавит.

а не передается вместе/вместо алфавита.

Это эквивалентно.

С каких пор за хранение состояния отвечает (или как-то участвует) входной алфавит? Тот самый state, который одновременно является и магией хранения состояния, и входным алфавитом?

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

Тот самый state, который одновременно является и магией хранения состояния, и входным алфавитом?

Я тебе написал, что модели эквивалентны, взаимозаменяемы. Как ты смотришь на состояние (а ты смотришь с точки зрения реализации), никого ниибет.

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

Видимо мы смотрим на разные реализации абстракции. Я говорю о реализации «язык», а ты — о возможной реализации интерпретатора этого языка. С т.з. языка мы имеем ящик automate, у которого нет входа (входного алфавита), есть состояние и есть выход. И на этом уровне мы не можем говорить, что внутренности ящика на самом деле могут быть его входом или о том, что вход есть, но он пуст и т.д.

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

Но, строго говоря, наверное, я не совсем прав, в том плане, что, да, автомат ТСа можно, условно, приравнять к автономному, как сказал Norgat.

Автомат называется автономным, если его входной алфавит состоит из одной буквы: А={а}. Все входные слова автономного автомата имеют вид аа...а.

Кагбе мы можем считать, что вызов без символа == вызов с одним символом. Но ты же написал, что это вообще не автомат.

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

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

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

автомат ТСа можно, условно, приравнять к автономному, как сказал Norgat.

Кагбе мы можем считать, что вызов без символа == вызов с одним символом. Но ты же написал, что это вообще не автомат.

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

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

Не вижу, чтобы где-то были введены дополнительные ограничения на функции переходов и выходов

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