2015-08-12 3 views
1

Много дней назад я увидел этот код на качестве открытого исходного кода:Какой язык программирования используется в этом коде?

frq =: [:-.[:(2:|+/)\''''&= 
    sp =: (#@[)([:<[}.[:>])"0 0[(]</.~[:+/\E.*.[:frq]), 
    spf =: [:<[:([:','&sp[:-.&')'=&'('{"0 1,.&',')> 
    cl =: #~[:-.e.&(33{.a.)*.frq 
    parse =: [:([:<[:(([email protected]{.),(}.`([:<[:([:<[:spf"0[:'),'&sp>)"0[:');'&sp[:>{:)@.(2:=#)))[:':-'&sp>)"0 _1:}.[:'.'&sp cl 

    isVar =: [:(91&>*.64&<)[:a.&i.[:{.> 
    replace =: ((]i.~[:{.[){([:{:[),]`([:<[$:[:>])@.([:32&=[:3!:0[:>]))"2 0 
    gp =: [:>[:{.> 
    gv =: [:(#~[:+./"1 isVar"0),. 
    suit =: ([(0:`(([:(#=[:#[:~.[:{.|:)[:~.[:(#~[:-.[:isVar"0[:{:|:)gv)*.([:*./[:+./[:(isVar"0,=/),:))@.(([:#[)=[:#]))[:gp])"1 0#] 
    sr =: [(](replace~[:|:])"2[:(([:-.[:isVar{:)"1#])[gv~[:gp])"1 0 suit 
    groupVars =: [:([:<]$~2:,~[:-:#)"1[:>[:([:<[:;(>@[)([:<,"1 1)"1 2(>@]))/]</.~[:{.|: 
    isRuleTrue =: ([:+./([:*./](isTrue~[:>])"1 0[:>[)"0 1)`(0:<[:#getVarsFromRule)@.(0:<#@[email protected];@;@[) 
    isTrue =: ]((a:&[email protected]])+.[:+./[(isRuleTrue~[:>])"1 0[:-.&a:])[:{:[:|:[:-.&(a:,a:)[:(0 2$a:)&,[:>sr 
    getVars =: ;(([:<[:~.(>@{[email protected][)gv[:gp])`((>@{[email protected][)$:(<@<@[email protected]])([replace~[:|:[:>])"0 0(}[email protected][)getVarsFromRule~[:>[:{:[:>])@.([:<:[:#[:>]))"1 0 sr 
    getVarsFromRule =: ](([:{.])#~[(isRuleTrue~[:>])"1 0[:{:])[:|:[(],[:<[replace~[:|:[:>])"1 0[:]`[email protected](0:<#)[:~.[:;[:;]([:<[getVars~[:>])"1 0[:;[ 

    goal =: ([:<S:0[:{.[:parse[:,&'.'])([:{&(>'No';'Yes')isTrue)`([:(]`((>@{.),[:' = '&,[:>{:)@.(2:=#))"1[:>getVars)@.([:+./[:isVar"0[)([:parse[) 

Я искал .j на этих страницах: (http://filext.com/file-extension/J), (http://fileinfo.com/extension/j). Они сказали, что написаны на языке Java.

Но, это называется: interpreter.j; и в его репозитории определено: Objective-J.

Я спросил некоторых людей: «Это написано в Objective-J?». Они спросили меня: «Неужели этот код был запутан?».


Какой язык программирования используется в этом коде?

+4

Это определенно J, и я считаю его запутанным. Это толчок, наполненный [cap] (http://www.jsoftware.com/jwiki/Vocabulary/squarelfco) ('[:'), который для меня означает, что кто-то запускал все через явный-молчащий конвертер J. – hoosierEE

+3

Посмотрите, как код реализует [простой интерпретатор Prolog] (http://sysmagazine.com/posts/201470/), хотя, для перспективы J-программиста, с каким-то чертовски уродливым кодом (мой прием - @hoosierEE правильный: это Парень изначально написал парсер в явном J, а затем использовал 13: чтобы преобразовать это в молчаливое J, чтобы он мог «хвастаться» своими навыками в своем блоге. Не понимая или конечно, что результаты использования 13: для преобразования больших проходы явного J для молчаливого J примерно такие же, как и результаты преобразования больших отрывков с русского на английский: они воспринимают эту идею попеременно, но нелепо.) –

ответ

3

Это J programming language, как расширение файла и bass-ackward assignment указывают.

Основываясь на моей ограниченной экспозиции (которая, по общему признанию, состоит только из фрагмента кода, предоставленного в вопросе), это также, по-видимому, первый язык, который я когда-либо обнаружил, что на самом деле превосходит Perl с точки зрения языка записи, Я думал, что никогда не доживу до этого :-) Думаю, я предпочел бы придерживаться чего-то более читаемого.

+0

Итак, что же делает этот фрагмент? :-) – Paul

+0

Никогда не видел APL, или FLUB? – EJP

+2

@Paul, это рекурсивная реализация строки поиска Boyer-Moore algori ... извините, я не могу держать прямое лицо, у меня на самом деле есть идея * no *, что она делает. Поскольку это называется 'interpreter.j', это, вероятно, не является * массивным * растяжкой, чтобы предположить, что это какой-то интерпретатор, хотя :-) Но, кроме того, кому-то более осведомленному нужно будет прослушивать. – paxdiablo

9

Да, это язык программирования J. Если вы на самом деле хотите узнать больше об этом, посмотрите на http://www.jsoftware.com

Поскольку он настолько краток, его может быть трудно прочитать вначале, но есть очень благоприятное сообщество, которое хочет ответить на вопросы. http://www.jsoftware.com/forums.htm

Кроме того, интерактивная среда J также включает в себя лаборатории, которые на самом деле помогут вам понять некоторые концепции, позволяя вам использовать всю мощь языка.

Если вы хотите хихикать о том, как трудно читать, а затем идти вперед - но, возможно, также попробовать. :-)

+0

Боб, отсутствие удобочитаемости - это именно та причина, по которой я * не буду * попробовать :-) Язык должен будет принести в стол большое количество причин использовать его, если это уберет такую ​​читаемость , Нет, я думаю, что, вероятно, буду придерживаться одной из сотен других. – paxdiablo

+1

Я думаю, что это немного аргумент из курицы и яйца, так как я могу прочитать код, потому что знаю язык. Я признаю, что строка J может быть столь же сложной, как чтение страницы C, но часто она делает столько или больше работы. Решениями Codegolf J являются доказательства этого. Единственное, что я скажу о вашем выборе сотен других, это то, что многие из них построены на той же процедурной основе. Знание J действительно влияет на то, как я смотрю на проблемы программирования, потому что это так отличается, и я мог бы сказать то же самое о Lisp и некоторых других. Наслаждайтесь своим выбором. – bob

+2

Чтение J не отличается от чтения математической формулы. Большинство из нас могут читать: 2 + 3 * 4 - 5 и даже применять приоритеты «*» над «+» и «-», потому что мы узнали об этом в начальной школе. Значение символов «+», «*» и «-» было приобретено рано и усилено на протяжении всей нашей 12-летней школы. Язык J ничем не отличается - это производная от APL, которая была разработана как инструмент для представления программируемых, проверяемых математических формул. С помощью нескольких часов практики вы сможете прочитать большинство символов J и понять основное значение многих J предложений. – aks

Смежные вопросы