ОЦЕНКА в СХЕМЕ

С word-break, очень длинное слово начинается с того места, с которого оно должно начинаться, и оно прерывается столько, сколько требуется

[X] I am a text that 0123
4567890123456789012345678
90123456789 want to live 
inside this narrow paragr
aph.

Однако, с word-wrap очень длинное слово НЕ БУДЕТ начать с того места, где оно должно начаться. он переносится на следующую строку, а затем прерывается столько, сколько требуется

[X] I am a text that 
012345678901234567890123
4567890123456789 want to
live inside this narrow 
paragraph.
5
задан unj2 25 June 2009 в 15:41
поделиться

5 ответов

Есть случаи, когда eval необходим, но они всегда включают продвинутые программы, которые выполняют такие вещи, как динамическая загрузка некоторого кода (например, сервлета на веб-сервере). Что касается способа «обойти» его использование - это зависит от реальной проблемы, которую вы пытаетесь решить, нет волшебного решения, позволяющего избежать eval , кроме ... eval .

(Кстати, я предполагаю, что PAIP был написан очень давно, до того, как eval был добавлен в отчет схемы.)

7
ответ дан 18 December 2019 в 09:09
поделиться

Он ошибается. Конечно, в схеме есть eval .

5
ответ дан 18 December 2019 в 09:09
поделиться

Вы можете написать интерпретатор схемы в схеме. Такое конечно возможно, но непрактично.

Конечно, это общий ответ, поскольку у меня нет используемой схемы, но, тем не менее, он может вам помочь. :)

-1
ответ дан 18 December 2019 в 09:09
поделиться

Во-первых, PAIP написан для Common Lisp, а не Scheme, поэтому я не знаю, сказал бы он то же самое. Макросы CL делают то же самое, что и eval , но во время компиляции, а не во время выполнения, и есть другие вещи, которые вы можете делать. Если бы вы показали мне пример использования eval в Common Lisp, я мог бы попытаться придумать другие способы сделать то же самое.

Я не программист на схемах. Я могу говорить только с точки зрения Норвига, как программиста Common Lisp. Я не думаю, что он говорил о Схеме, и я не знаю, знал ли он или знает особенно хорошо Схему.

Во-вторых, Норвиг говорит, что "вы, вероятно, делаете неправильные вещи", а не "вы делаете то неправильная вещь ". Это означает, что, насколько он знает, есть s раз, когда правильно использовать eval . На таком языке, как C, я бы сказал то же самое о goto , хотя они весьма полезны в некоторых ограниченных обстоятельствах, но большинство goto используют люди, которые не знаю лучше.

1
ответ дан 18 December 2019 в 09:09
поделиться

Я видел одно использование eval в средах сценариев - параметризация некоторого кода значениями времени выполнения. например, в psuedo-C:

param = read_integer();
fn = eval("int lambda(int x) { 
            int param = " + to_string(param) + "; 
            return param*x; }");

Я надеюсь, вы найдете это действительно уродливым. Вставка строки для создания кода во время выполнения? Ик. В Scheme и других Lisp с лексической областью видимости вы можете создавать параметризованные функции без использования eval.

(define make-my-fn
  (lambda (param)
    (lambda (x)  (* param x)))

(let* ([ param  (read-integer) ]
       [ fn     (make-my-fn param ])
  ;; etc.
 )

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

0
ответ дан 18 December 2019 в 09:09
поделиться
Другие вопросы по тегам:

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