программирование и логика
May. 13th, 2012 12:28 pmПолное помеченное двоичное дерево (то есть отображение множества 01-слов в 01, каждому слову, то есть вершине, соответствует метка) может быть задано по-разному:
(1) как программа, которая по слову указывает метку соответствующей вершины
(2) как программа, которая в применении к 0 даёт метку корня, а в применении к 1 и 2 выдаёт текст программ, задающих (в том же смысле) левое и правое поддеревья
От (2) к (1) переход очевиден, надо рекурсивно вызывать интерпретатор - а обратный переход не совсем очевиден (и может быть хорошей задачей по логике для программистов)
(1) как программа, которая по слову указывает метку соответствующей вершины
(2) как программа, которая в применении к 0 даёт метку корня, а в применении к 1 и 2 выдаёт текст программ, задающих (в том же смысле) левое и правое поддеревья
От (2) к (1) переход очевиден, надо рекурсивно вызывать интерпретатор - а обратный переход не совсем очевиден (и может быть хорошей задачей по логике для программистов)
no subject
Date: 2012-05-13 11:04 am (UTC)no subject
Date: 2012-05-13 02:37 pm (UTC)no subject
Date: 2012-05-13 03:41 pm (UTC)no subject
Date: 2012-05-13 05:18 pm (UTC)no subject
Date: 2012-05-13 08:10 pm (UTC)no subject
Date: 2012-05-13 10:18 pm (UTC)С точки зрения функционального языка можно сказать, что определение (1) описывает сборку дерева, а (2) --- его разборку. Индукция и коиндукция.
no subject
Date: 2012-05-14 07:30 am (UTC)no subject
Date: 2012-05-14 10:22 am (UTC)no subject
Date: 2012-05-14 11:48 am (UTC)no subject
Date: 2012-05-14 03:17 pm (UTC)no subject
Date: 2012-05-14 01:07 pm (UTC)no subject
Date: 2012-05-15 02:23 pm (UTC)Нужно написать лямбда-выражение, сотсоящее из функцию и поддерева данных. Функция должна возвращать лямбда-выражение в символьном виде. Функция примает два аргумента: дерево данных и 0/1/2 селектор. Дерево данных уже присутвует в лямбда-выражении, то есть имеется partial application: f a b = (f a) b.
Практика:
Лямбда-выражение можно закодировать в самой вульгароной скобочной форме, вроде:
execute (data (data ("a", "b"), 'c"), argument)
Это должно быть завернутов некий интерпретатор, что тоже тривиально.