Поддерживают ли какие-либо языки общего назначения n + 2 = 3 и более? - PullRequest
1 голос
/ 22 декабря 2011

Поддерживают ли какие-либо языки общего назначения, например:

n + 2 = 3;

Чтобы гарантировать, что, среди прочего, 'n' теперь будет читаться как 1, а в других случаях как несколько, но не совсем неопределенноvalue.

Помимо этого, есть ли кто-нибудь, кто может поддержать эту концепцию для алгоритмического материала в целом, например, смесь строк и чисел с такими понятиями, как конкатенация, подстрока, числовое побитовое вращение и т. д. ... не потому, что somoneжестко закодировал его в languege, но потому что languege понимает, что он использует свои знания о том, как все работает (ваши классы стиля C ++, ваш бесклассовый язык сценариев, такие как объекты, функции, которые существуют и т. д.), и использует эти знания для перестановки вещей, как есть.общее в алгебре.

Ответы [ 4 ]

4 голосов
/ 22 декабря 2011

Я думаю, что только Prolog может делать такие вещи (считая только хорошо известные языки программирования).

1 голос
/ 02 декабря 2012

Haskell имел так называемые шаблоны "n-plus-k", где, например, вы могли бы написать функцию факториала как:

fac 0     =  1
fac (n+1) = (n+1) * fac n

Теперь это рассматривается как A BadИдея (некоторые причины здесь ), и была удалена из спецификации языка (устарела в Haskell98 и удалена в Haskell2010).Но!Существует более сложная, более общая форма, над которой работают в будущих версиях Haskell:

Просмотр шаблонов - см. Раздел «Шаблоны N + K»

1 голос
/ 26 декабря 2011

Конечно: Algol 60 подразумевает поддержку этого конкретного случая, если я правильно помню (не уверен ... это было давно). Однако только простой линейный случай, который бесполезен, так как достаточно легко вычесть константу изобе стороны в вашей голове.

Однако многие современные языки ставят перед компилятором гораздо более сложные проблемы с точки зрения их систем типов.Многие допускают постановку проблем типизации, которые имеют решение, но которые компилятор не может решить, это особенно верно для компиляторов, которые делают вывод типов.

0 голосов
/ 22 декабря 2011

Языки общего назначения называются причинами общего назначения. Вы не решаете с ними математические задачи.

Ни один из языков GP, которые я знаю, не разрешал выражения в левой части назначения. У Эрланга есть сопоставление с образцом, но это совсем другое.

...