Haskell, Lisp и [закрытое] многословие

Код не запускается / что-то похожее на части моего PHP-кода выводятся

Если вы не видите никакого результата из вашего кода PHP и / или видите части своего литерального исходного кода PHP на веб-странице вы можете быть уверены, что ваш PHP на самом деле не выполняется. Если вы используете View Source в своем браузере, вы, вероятно, видите весь исходный код PHP-файла. Поскольку PHP-код встроен в теги , браузер попытается интерпретировать их как HTML-теги, и результат может выглядеть несколько смущенным.

Чтобы на самом деле запустить ваши PHP-скрипты, вам нужно:

  • веб-сервер, который выполняет ваш скрипт
  • , чтобы установить расширение файла на .php, в противном случае веб-сервер не будет интерпретировать его как таковой *
  • для доступа ваш .php-файл через веб-сервер

* Если вы не переконфигурируете его, все может быть настроено.

Это последнее особенно важно. Двойной щелчок по файлу, скорее всего, откроет его в вашем браузере, используя такой адрес, как:

file://C:/path/to/my/file.php

Это полностью обходит любой веб-сервер, который у вас может быть запущен, и файл не интерпретируется. Вам нужно посетить URL-адрес файла на вашем веб-сервере, вероятно, что-то вроде:

http://localhost/my/file.php

Вы также можете проверить, используете ли вы короткие открытые теги вместо и ваша PHP-конфигурация отключила короткие открытые теги.

Также см. PHP-код не выполняется, вместо этого код отображается на странице

104
задан Don Stewart 18 April 2011 в 23:05
поделиться

8 ответов

Короткий ответ:

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

[Примечание: существует" Шаблонный Haskell", который позволяет Вам записать макросы так же, как в Lisp, но строго говоря Вы никогда не должны потребность это.]

68
ответ дан ShreevatsaR 24 November 2019 в 04:10
поделиться

В первую очередь, не волнуйтесь о потере конкретных функций как динамический контроль типов. Поскольку Вы знакомы с языком Common LISP, замечательно хорошо разработанным языком, я предполагаю, что Вы знаете, что язык не может быть уменьшен до своего набора функций. Это - все о едином целом, не так ли?

В этом отношении, Haskell блистает так ярко, как язык Common LISP делает. Его функции объединяются для предоставления Вам способ запрограммировать, который делает код чрезвычайно коротким и изящным. Отсутствие макросов смягчено несколько более тщательно продуманным (но, аналогично, тяжелее чтобы понять и использовать) понятия как монады и стрелки. Статическая система типов добавляет к Вашему питанию вместо того, чтобы стоять на пути, как это делает на большинстве объектно-ориентированных языков.

, С другой стороны, программируя в Haskell является намного менее интерактивным, чем Lisp, и огромный объем отражения, существующего на языках как Lisp просто, не соответствует статичному представлению мира, который предполагает Haskell. Комплекты инструментальных средств, доступные Вам, поэтому очень отличаются между этими двумя языками, но трудно выдерживать сравнение друг с другом.

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

64
ответ дан Matthias Benkard 24 November 2019 в 04:10
поделиться

Существует меньше потребности в метапрограммировании в Haskell, чем в языке Common LISP, потому что много может быть структурировано вокруг монад, и добавленный синтаксис заставляет встроенный DSLs выглядеть менее древовидным, но всегда существует Шаблон Haskell, как упомянуто ShreevatsaR, и даже Liskell (семантика Haskell + синтаксис Lisp), если Вам нравятся круглые скобки.

13
ответ дан Community 24 November 2019 в 04:10
поделиться

В Haskell можно определить, если функция, которая невозможна в LISP. Это возможно из-за лени, которая допускает больше модульного принципа в программах. Эта классическая бумага: то, Почему FP имеет значение John Hughes, объясняет, как лень улучшает composability.

6
ответ дан luntain 24 November 2019 в 04:10
поделиться

В то время как я продолжаю свое Haskell-приобретение-знаний поездки, кажется, что одной вещью, которая помогает "заменить" макросы, является способность определить Ваши собственные инфиксные операторы и настроить их приоритет и ассоциативность. Отчасти сложный, но интересная система!

4
ответ дан J Cooper 24 November 2019 в 04:10
поделиться

Я программист на Common Lisp.

Некоторое время назад я попробовал Haskell, и в итоге я решил придерживаться CL.

Причины:

  • dynamic набор текста (см. Динамический и статический набор текста - анализ на основе шаблонов Паскаль Костанца )
  • необязательные аргументы и ключевые слова
  • унифицированный синтаксис гомоиконного списка с макросами
  • синтаксис префикса (не нужно запоминать правила приоритета)
  • нечистый и, следовательно, более подходящий для быстрого прототипирования
  • мощный объектная система с метаобъектным протоколом
  • зрелый стандарт
  • широкий спектр компиляторов

Haskell, конечно, имеет свои достоинства и делает некоторые вещи принципиально другим способом, но он просто не сокращает его в долгосрочной перспективе для меня.

9
ответ дан 24 November 2019 в 04:10
поделиться

There are really cool things that you can achieve in Lisp with macros that are cumbersome (if possible) in Haskell. Take for example the `memoize' macro (see Chapter 9 of Peter Norvig's PAIP). With it, you can define a function, say foo, and then simply evaluate (memoize 'foo), which replaces foo's global definition with a memoized version. Can you achieve the same effect in Haskell with higher-order functions?

5
ответ дан 24 November 2019 в 04:10
поделиться

Что касается макросов, вот страница, где об этом говорится: Hello Haskell, Goodbye Lisp. Она объясняет точку зрения, согласно которой макросы в Haskell просто не нужны. Для сравнения приводится небольшой пример.

Пример случая, когда макрос LISP необходим, чтобы избежать оценки обоих аргументов :

(defmacro doif (x y) `(if ,x ,y))

Пример случая, когда Haskell систематически не оценивает оба аргумента, без необходимости в чем-либо вроде определения макроса :

doif x y = if x then (Just y) else Nothing

И вуаля

10
ответ дан 24 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: