Разбор лямбда-функции, описывающей часть логической схемы - Lisp
Формулировка задачи:
Здравствуйте, друзья!
Очень прошу помочь в следующей задаче (-исчисление):
- имеются константы следующего вида:
- xL ;логическое НЕ
- xLy ;логическое ИЛИ
- x(yL)L ;логическое И
- имеется булева функция: f (x,y,z) = x & y & z, т.е. два последовательных конъюнктора (первый с входами X, Y и второй с входами ВЫХОД ПЕРВОГО, Z (т.е. включены каскадом)). Эта же функция в лямбда-исчислении: xyz.(x(yL)L)(zL)L (до точки входные значения лямбда-функции, после точки - тело функции)
Как можно видеть, b = x(yL)L - это первый конъюнктор, c = b(zL)L - второй.
Проще всего решать через подстановку первой части функции (см. выражение C), т.е. разбирать схему с хвоста
Необходимо сделать разбор входной строки с функцией вида "xyz.(x(yL)L)(zL)L",
на выходе получить запись вида: И, вход: x, y, выход: b
И, вход: b, z, выход: c
Реализация желательна с использованием CommonLisp.
PS. Сам могу написать эту прогу хоть Ассемблере, хоть на C, Pascal, PHP и иже с ними. Но LISP, а надо на нем, уже выкушал мне моцК. Все никак не могу выбрать то ли со строкой работать, то ли преобразовать ее в список и убиваться с ним.
PSS. Очень надо... Общая задача намного сложнее, это ее малая часть, но там я уже сам по-аналогии.
Решение задачи: «Разбор лямбда-функции, описывающей часть логической схемы»
textual
Листинг программы
(task '(x L y)) ==> (OR x y)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д