爲了討論的方便,讓我們說,我想下面的程序:嵌套明確定義
foo =: monad define
bar =. dyad define
x * y
)
bar/ y * 2 3
)
理想的情況下,輸入3
,這將產生54
。但是,將其放入控制檯時,兩個)
中的第一個將被視爲第一個define
的結尾。有什麼辦法可以防止這種情況發生?我想避免一個內聯動詞,如monad def 'x * y'
。我的實際動詞例子比這更復雜。
爲了討論的方便,讓我們說,我想下面的程序:嵌套明確定義
foo =: monad define
bar =. dyad define
x * y
)
bar/ y * 2 3
)
理想的情況下,輸入3
,這將產生54
。但是,將其放入控制檯時,兩個)
中的第一個將被視爲第一個define
的結尾。有什麼辦法可以防止這種情況發生?我想避免一個內聯動詞,如monad def 'x * y'
。我的實際動詞例子比這更復雜。
您不能嵌套多行定義,因爲沒有檢查定義的內容。定義結束並保存第一次遇到^)LF
。
多線體是一個由單獨右括號終止的腳本,所以我們不能在另一個體內放置一個這樣的體。
有(凌亂的)方式去解決這個問題,例如通過形成串並進行評價:
foo =: monad define
str =. 'x * y'
bar =. 4 : (str,:'')
bar /y * 2 3
)
foo 3
54
可能形成幫手副詞是一個更好的主意。
(編輯)通過定義bar
的主體分開:
bar_body =: 0 : 0
c=. x + y
c * y
)
foo =: 3 : 0
bar =. 4 : bar_body
bar/y * 2 3
)
foo 3
135
嵌套終止'實施例)的是有問題的,但是這可能是工作
foo =: monad define
bar =. 4 : 'x * y'
bar/ y * 2 3
)
foo 3
54
多行在酒吧定義可能只是連續裝箱 字符串。
foo =: monad define
bar =. 4 : ('t=.x * y';'t+1') NB. parenthesis required
bar/ y * 2 3
)
foo 3
55
缺乏嵌套塊的是有意的設計決定。
這個想法是對開發者施加壓力來命名塊。 (而且,更一般地說,開發人員有一些重要的壓力來支持簡潔的代碼。)
也就是說,副詞(和連詞)可用於將塊連接在一起。
你有沒有引用缺席的意向?我認爲限制程序員可以在設計的基礎上做什麼是很奇怪的。 –
動詞多行怎麼樣?例如'c =。例如,「x + y」然後是「c * y」。 –
這就是'(str::...)'部分的用途:'(line1,line2,...,:linen)'。對於單行,你只需'bar =。 4:str'。 – Eelvex
啊我明白了。好吧,我想這會起作用。謝謝! –