2014-02-16 7 views
2

Я читал «Конкретную математику» Грэма, Кнута и Паташника «Конкретный математический компаньон» Иверсона. Вторая глава посвящена суммированию, и Айверсон вводит следующий код, чтобы продемонстрировать «метод репертуара» от GKP.J Ошибка синтаксиса (из «Бетоносмесителя» Айверсона)

CPA=: (@Ei) %. ^/[email protected] 

где определяется Ei ранее

Ei=: [email protected]>: 

Таким образом, полное выражение

(@[email protected]>:) %. ^/[email protected] 

Вот цитата, чтобы дать лучший контекст:

Способом, аналогичным к репертуарному методу GKP, мы найдем нерекурсивный эквивалентно рекурсивно определенной функции, если найти многочлен, соответствующий нескольким его значениям. Для этого мы будем использовать наречие:

CPA=: (@Ei) %. ^/[email protected] 

так определен, что «е СР п» дает коэффициенты полинома аппроксимации порядка п к функции ф.

Вот заявление синтаксической ошибки:

|syntax error 
| CPA=:( @[email protected]>:)%.^/[email protected]([email protected]>:) 

Я только недавно начал играть с J, поэтому до сих пор я только использовали заметки Айверсон как способ затвердеют понятия из ГКПА. Спасибо С.О.

ответ

3

Начиная с J501, поезда нагло-глагола-глагола более не разрешены. Таким образом, единственный способ, чтобы написать CPA является, as bob noted, явно:

CPA =: 1 :'[email protected] %. ^/[email protected]' 

В той же книге, немного выше, Айверсон вводит еще один наречием S =: (+/@:)(@Ei)"0 который работает отлично.

Давайте определим каждую часть CPA и S:

cpa1 =: @Ei 
cpa2 =: %. 
cpa3 =: ^/[email protected] 
s1 =: +/@: 
s2 =: @Ei 

так

list {~ class ;:'cpa1 cpa2 cpa3' 
┌──────┬────┬────┐ 
│adverb│verb│verb│ 
└──────┴────┴────┘ 
list {~ class ;:'s1 s2' 
┌──────┬──────┐ 
│adverb│adverb│ 
└──────┴──────┘ 

мы видим, что CPA поезд из наречия-глагол-глагола, который не допускается в J501 и выше , но S - это наречий-наречий крючок, который равен, разрешенному в J501 и выше.

DEFS:

list =: ;:'noun adverb conjuction verb'

class =: 4!:0

+0

См [словарь на поездах] (http://www.jsoftware.com/help/dictionary/dictf.htm), для которых поезда разрешены. – Eelvex

1

Вы можете попробовать его определения явно

CPA=: 1 : '([email protected]) %. ^/[email protected]' 

По крайней мере, не возвращает ошибку синтаксиса в J602. Будь то то, что вы ожидаете, зависит от вас, чтобы определить, поскольку у меня нет ни одного текста в моем распоряжении.