2016-01-07 4 views
0

Я хотел бы знать, как я могу различать 'значение' и 'выражение'.Хотите отличить значение и выражение

В информатике значение представляет собой выражение, которое не может быть оценено далее (нормальная форма). [1] Элементами типа являются значения этого типа. [1] Например, выражение 1 + 2 не является значением , так как оно может быть уменьшено до выражения 3. Это выражение не может быть уменьшено до дальнейшего (и является членом типа Nat), и поэтому является значением.

Я нашел заявление выше, используя URL: https://en.wikipedia.org/wiki/Value_(computer_science)2

Из этого заявления я чувствовал:

Я думаю, что «значение» выглядеть «атома» в химии на основе по определению Mitchell, John C.

Но кто-то отрицал это:

Но даже выражения могут быть (представлены как) значениями. Классический случай является s-выражением в Lisp-подобных языках. - user2864740

Этот разговор в другом потоке: что-это-The-значение-в-1-класса стоимостью 3

Было бы так просто, если user2864740 ничего не сказал. Но он так сказал, и я смущен.

Может ли кто-нибудь объяснить мне об этой ситуации? или разница, которая может существовать в lisp, как Языки?

Спасибо заранее!

[1] Mitchell, John C. (1996). Основы для языков программирования. Пресса MIT.

+2

Я думаю, что я поставил бы больше акций в рассуждениях Джона Митчелла, чем user2864740 ... –

+0

@ Джон Ханколл, мне также нужно понять только утверждение Джона Митчелла. Я не знаю о Лиспе. Позвольте мне просто забыть s-выражение вещь ... – Jeonghum

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это более общий вопрос в области компьютерной науки. –

ответ

3

Если вы не знаете Lisp, прочитайте SICP и играйте с некоторыми Scheme осуществления.

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

Я настоятельно рекомендую прочитать книгу C.Queinnec's Lisp In Small Pieces, в которой объясняется, как выражаются интерпретаторы LISP или выражения компиляторов, поэтому накрывайте свой вопрос большими подробностями.

(на самом деле ваш вопросу нужна целая книга ответа, и книга Queinnec является то, что книга)

LISP является homoiconic языка, следовательно s-expressions являются значение (но несколько значений не выражения, в в частности closures). Но большинство языков программирования - C, Ocaml, Javascript, C++, Java и т. Д. - являются (грустно) не гомоиконными: их AST: не Значение и выражения не могут управлять АСТ изначально.

Кстати, Википедия предложение

значение это выражение, которое не может быть оценено дальше

не всегда правильно. Например, для языка C значения и выражения - это разные виды животных.

Вы также должны прочитать что-то о языках программирования formal semantics.

Кроме того, чтение Скотта Programming Language Pragmatics даст вам более широкий обзор (через несколько языков программирования).

+0

Благодарим вас за предоставление нам многих ссылок о многих вещах, которые мне нужно прочитать. Может быть, мне нужно читать больше, чем задавать вопросы здесь. Спасибо. – Jeonghum

+1

Начните играть со схемой во время чтения SICP, это необходимо –

+0

Я боюсь, если я действительно пойму эти изящные функциональные языки - LISP, схему, haskell. Кто-то сказал мне, что понимание функциональной парадигмы требует большего количества учебных расходов, чем парадигма ОО. Я много потратил, чтобы узнать о OO. Чтобы узнать еще одну хорошую вещь, я должен собрать/подготовить больше денег/времени/ума ... Спасибо, хотя .. Я не джедай ^^; – Jeonghum

1

Значение представляет собой базовое представление: машинное представление некоторой части информации, например числа или символьной строки. Базис относится к типу , который имеет связанный с ним домен: как набор всех возможных значений этого типа. Значение является элементом этого набора.

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

Назначение выражения может означать вычисление значения; в этой ситуации ANSI Common Lisp относится к выражению в виде формы . Не все выражения являются формами. Например, в (let ((a 42))), (a 42) это выражение, обозначающее, в контексте let, переменная a и его инициализации формы 42 и ((a 42)) это выражение, обозначающее полный список спецификаций связывания в соответствии с этим let.

Если форма вычисляется, и результатом является точка привязки аналогична той самой форме, то одно из двух является случай: форма может быть буквальным (значение, которое вычисляется в себя, если он обрабатывается как выражение), или это может быть quine: умная форма, которая непосредственно не дает себя в качестве значения (как это делает литерал), но искусно вычисляет объект, который является структурно идентичным самому себе.

Значение не определено как выражение, которое неприводимо и обозначает себя; это буквальная константа. Литеральная константа обозначает значение. Значения, однако, существуют во всех контекстах, таких как контекст времени выполнения, в котором синтаксис больше не имеет значения. Когда программа запущена, она может создавать значения, которые никогда не существуют как часть синтаксиса. Если мы оцениваем (+ 2 2), существует 4, которые никогда не появлялись в синтаксисе как выражение 4.Поэтому мы не можем сказать, что значение 4 является неприводимым выражением; значение существует, даже если такое выражение не выполняется.

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