Опубликован: 09.01.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Самостоятельная работа 2:

Функции SML для основных комбинаторов

< Лекция 7 || Самостоятельная работа 2 || Лекция 8 >
Аннотация: Цель: получить представление об отображении комбинаторной логики на язык SML.
Ключевые слова: формальная система, SML

Теоретические сведения

Согласно определению, комбинатором называется ламбда-выражение, не содержащее связанных переменных. Например, если в законе коммутативности

x+y = y+x

определить функцию

alpha(x,y) = x + y

и оператор С

(Cf)(x,y) = f(xy),

то данный закон примет следующий вид:

alpha = C alpha.

Формальная система комбинаторной логики естественным образом отображается на языки функционального программирования. В качестве иллюстрации определим SML-функции для базисных комбинаторов I, K, S:

fun Ix = x;
fun Kxy = x;
fun Sxyz = xz(yz);

Напомним, что характеристики перечисленных комбинаторных термов в рамках формальной системы комбинаторной логики имеют вид:

Ix = x,
Sxyz = xz(yz),
Kxy=x.

Задание

Сформулируйте формальную постановку задачи, запишите правила вывода и реализуйте программу на SML в соответствии с вариантом исполнения.

Варианты заданий

Выразить в базисе {K,S} комбинаторы с заданными характеристиками, убедиться в справедливости произведенных преобразований:

  1. I, где Ia = a ;
  2. B, где B abc = a(bc) ;
  3. C, где C abc = acb ;
  4. W, где W ab = abb ;
  5. Y, где Y abcd = a(bc)(bd) ;
  6. C[2], где C[2] abcd = acdb ;
  7. C[2], где C[2] abcd = adbc ;
  8. Y, где Ya = a (Ya) ;
  9. C[3], где C[3] abcde = acdeb ;
  10. C[3], где C[3] abcde = aebcd ;
  11. B3, где B3 abcde = a(bcde) ;
  12. F, где F abcd = a(bd)(cd) ;

Выразить в базисе {B,C,S} комбинаторы с заданными характеристиками, убедиться в справедливости произведенных преобразований:

  1. I, где Ia = a ;
  2. K, где K ab = a ;
  3. S, где S abc = ac(bc) ;
  4. W, где W ab = abb ;
  5. Y, где Y abcd = a(bc)(bd) ;
  6. C[2], где C[2] abcd = acdb ;
  7. B2, где B2 abcd = a(bcd) ;
  8. Y, где Ya = a (Ya) ;
  9. C[3], где C[3] abcde = acdeb ;
  10. C[3], где C[3] abcde = aebcd ;
  11. F, где F abcd = a(bd)(cd).
< Лекция 7 || Самостоятельная работа 2 || Лекция 8 >
Овик Бадалян
Овик Бадалян
Армения, Степанакерт
Алексей Кузнецов
Алексей Кузнецов
Россия