Могут ли программы на Haskell быть представлены как S-выражения Lisp? - PullRequest
14 голосов
/ 02 июня 2011

Это было бы полезно для генетического программирования, которое обычно использует подмножество Lisp в качестве представления для программ.

Я нашел что-то под названием Liskell (синтаксис Lisp, Haskell внутри) в Интернете, но ссылкисломан, и я не могу найти на нем бумагу ...

Ответы [ 5 ]

15 голосов
/ 02 июня 2011

Проверьте Lisk , который был разработан, чтобы исправить авторские ласки с Лискеллом.

В свободное время я работаю над проектом под названием Lisk.Используя опцию -pgmF для GHC, вы можете предоставить GHC имя программы, которая вызывается для предварительной обработки файла перед его компиляцией GHC.Это также работает в GHCi и импорт.Вы используете это так:

{-# OPTIONS -F -pgmF lisk #-}
(module fibs
  (import system.environment)

  (:: main (io ()))
  (= main (>>= get-args (. print fib read head)))

  (:: test (-> :string (, :int :string)))
  (= test (, 1))

  (:: fib (-> :int :int))
  (= fib 0 0)
  (= fib 1 1)
  (= fib n (+ (fib (- n 1))
              (fib (- n 2)))))

Источник здесь .

Кроме того, если вы на самом деле не заботитесь о Haskell и просто хотите немногоиз его возможностей вы можете проверить Qi (или его преемника, Shen ), который имеет синтаксис s-выражения со многими современными функциями функционального программирования, подобными Haskell.

6 голосов
/ 02 июня 2011

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

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

В любом случае, это может быть полезно для вас или нет- посмотри и реши сам.

3 голосов
/ 02 июня 2011

В большинстве программ генетического программирования программы представлены в виде абстрактных синтаксических деревьев (AST), которые оцениваются непосредственно в этой форме.Синтаксис S-выражения в Lisp очевиден только тогда, когда программы выводятся в виде исходного кода.Рассматривали ли вы просто изменение модуля вывода в выбранном вами программном обеспечении для получения исходного кода на Haskell вместо AST?

3 голосов
/ 02 июня 2011

Бумага Лискелла находится по адресу http://clemens.endorphin.org/ILC07-Liskell-draft.pdf, а сайт liskell.org, похоже, все еще работает.

3 голосов
/ 02 июня 2011

Очевидный ответ - «да» - неудивительно, учитывая, что S-выражения были заданы как простое и единообразное представление разобранного кода.Дело в том, что такие языки, как Haskell или ML, как правило, имеют некоторые проблемы с этим.Однажды я сделал что-то похожее на OCaml (злоупотребил CamlP4 и написал некоторую функцию, которая переводит P4 AST в некое подобие sexpr представления), и веселье начинается, когда вы сталкиваетесь с подобными типами узлов AST, которые имеют разные типы, потому что они на самом делето же самое ... Например, есть приложение функции, и есть похожая форма, которая используется в шаблонах, и еще одна форма, которая используется в выражениях типов.

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

...