4

Я должен сделать проект термина в своем символическом классе программирования. Но я не уверен, какой будет хороший/законный проект. Может ли кто-нибудь дать мне примеры символического программирования? Просто любые общие идеи, потому что прямо сейчас я склоняюсь к пошаговой игре (в основном стиле jrpg), но я действительно не хочу делать игру.Что такое примеры символического программирования?

+3

Я думаю, что я слышал, что оригинальная мотивация Маккарти на Лиспе было написать программу, чтобы сделать автоматическую дифференциацию. Любая компьютерная алгебра, вероятно, квалифицируется как символическое программирование. – Ken

+0

@ Ken: Вы должны сказать это как ответ, это хорошее предложение. – Charles

ответ

3

Простой арифметический переводчик в Scheme, который принимает список символов в качестве входных данных:

(define (symbolic-arith lst) 
    (case (car lst) 
    ((add) (+ (cadr lst) (caddr lst))) 
    ((sub) (- (cadr lst) (caddr lst))) 
    ((mult) (* (cadr lst) (caddr lst))) 
    ((div) (/ (cadr lst) (caddr lst))) 
    (else (error "unknown operator")))) 

Пробное:

> (symbolic-arith '(add 2 43)) 
=> 45 
> (symbolic-arith '(sub 10 43)) 
=> -33 
> (symbolic-arith '(mu 50 43)) 
unknown operator 
> (symbolic-arith '(mult 50 43)) 
=> 2150 

Это показывает основную идею мета-круговое переводчиков. Lisp in Small Pieces - лучшее место, где можно узнать о таких переводчиках.

Еще один простой пример, в котором списки символов используются для реализации хранилища данных ключ-значение:

> (define person (list (cons 'name 'mat) (cons 'age 20))) 
> person 
=> ((name . mat) (age . 20))  
> (assoc 'name person) 
=> (name . mat) 
> (assoc 'age person) 
=> (age . 20) 

Если вы новичок в Лиспе, Common Lisp: A Gentle Introduction to Symbolic Computation является хорошим местом для начала.

2

Это не (просто) голая попытка украсть репутацию Кена. Я не помню, какова была оригинальная мотивация Маккарти для создания Lisp. Но он, безусловно, подходит для компьютерной алгебры, включая дифференциацию и интеграцию.

Причина, по которой я размещаю, заключается в том, что автоматическая дифференциация используется для обозначения чего-то другого, кроме дифференцирования символических выражений. Он используется для обозначения функции, которая вычисляет производную от другой функции. Например, с учетом программы Fortran, которая вычисляет f(x), инструмент автоматического дифференцирования записывает функцию Fortran, которая вычисляет f'(x). Один из способов, конечно, состоит в том, чтобы попытаться преобразовать программу в символическое выражение, затем использовать символическое дифференцирование, а затем преобразовать полученное выражение в программу снова.

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

4

В этом контексте полезен книга Paradigms of Artificial Intelligence Programming, Case Studies in Common Lisp Петра Норвига.

В книге подробно описывается символическое программирование ИИ с использованием Common Lisp.

Примеры относятся к области компьютерной алгебры, решения математических задач, игры, реализации компилятора и т. Д.

Скоро будет еще одна забавная книга: The Land of Lisp от Conrad Barski.

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

  • вопрос естественного языка отвечать
  • естественного языка поколение истории
  • планирования в логистике
  • компьютерной алгебры
  • диагностики неисправностей технические системы
  • описание каталогов вещей и соответствия
  • игры играть
  • сцены understaning
  • конфигурацию технических вещей
Смежные вопросы