Replies: 25 comments 51 replies
This comment has been hidden.
This comment has been hidden.
-
I've written the syntax of |
Beta Was this translation helpful? Give feedback.
-
{T} : empty or more repetitions separated by optional commas (trailing comma is valid)
term = NAT // natural number
| "<" { term } ">" // prod
| "[" { term } "]" // vec
| "{" { term "=>" term } "}" // map
| "λ" type "->" term // function
| "@" IDENT term // label
| "@@" IDENT term // brand
| "branch" term "{" { type "=>" term } "}" // branch
| "let" term "in" term // let
| "&" type { term } // ref
| "!" term "~>" type // perform
| "handle" term "{" {type "~>" type "=>" term} "}" // handle
| term ":" type // type annotation
| "Π" term // dependent product
| "Σ" term // dependent sum
| "#" DSON term // attr |
Beta Was this translation helpful? Give feedback.
-
これはDesk言語の構文ですか? |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
主にTAPLやCoPLなどOCaml勢の慣習にしたがって構文を書き直すと以下のように書けます:
非終端記号は1文字で表し、繰り返しはt1,t2,t3,...,tnのように書いて0個からか1個からかまで厳密には表スことよりわかりやすさを優先します。term は t、type も t のように頭文字が重なってしまう場合はtype を τ のようにギリシャ文字を使うこともよくあります。 |
Beta Was this translation helpful? Give feedback.
-
実は私が書いたProductの文法には強い不満があります。ほかに良さげなものを思いつかなかったので、仮のものを書いた感じです。
あたりになります。 |
Beta Was this translation helpful? Give feedback.
-
Desk言語の実装に置いては細かい構文は重要になると思いますが、論文では主に意味論などに興味があるためproduct の機能を導入するならproduct < t1/τ1,t2/τ2,...,tn/τn > とそのまま書くほうがわかりやすいと思います。 |
Beta Was this translation helpful? Give feedback.
-
productの意味がよくわからないのですけどtupleな感じなのか、レコードな感じなのか、effect systemの話なのかがよくわからないので例があるとよいのではないかと思います。 |
Beta Was this translation helpful? Give feedback.
-
決めました。termという概念を消します。そうすれば私がDesk言語の文法や型システムに対して抱いていた色々な不満を一挙に解決できそうです。 |
Beta Was this translation helpful? Give feedback.
This comment has been hidden.
This comment has been hidden.
-
effect system の単純な実装 λeff の構文 https://github.com/Nymphium/lambdaeff/blob/master/text/main.pdf |
Beta Was this translation helpful? Give feedback.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
色々な言語の論文の構文定義を拾ってきて見ましたが、よくあるパターンだと構文のコメントはカッコで括らなくて、1文字で非終端記号を表してます。ただカッコでコメントを書く人もいる。コメントは書かずに説明するパターンも多々ある感じです。 |
Beta Was this translation helpful? Give feedback.
-
文法を更新しました。些細なミスとかはあるかもしれませんが内容としては満足いくものになりました。 |
Beta Was this translation helpful? Give feedback.
-
コンテキストも書きました。あとで追記します。
|
Beta Was this translation helpful? Give feedback.
-
型付け規則や評価規則、部分型付け規則も様々な流儀があります。 評価規則 |- e --> v
評価規則 e --> v
評価規則 {e} --> {v} (前提をifで書く)
評価規則 {e} --> {v} (前提をiffで書く)
評価規則 e ⇓ v (前提をwhereで書く)
要はわかれば良いのですが、ネストを合わせるときれいに見えます。 |
Beta Was this translation helpful? Give feedback.
-
Desk言語は、普通の言語からかなりかけ離れた思想で作られていると思います。 まずは構文を書いて、各要素に名前をつけそれぞれの機能についての使い方の例をあげて分かったとなった後に型付け規則などで説明してもらえるとわかりやすくなると思います。 |
Beta Was this translation helpful? Give feedback.
-
部分型付けの規則は磯野家の例がわかりやすいですね。 :- op(500,xfx,<:).
サザエ <: 波平.
サザエ <: フネ.
カツオ <: 波平.
カツオ <: フネ.
わかめ <: 波平.
わかめ <: フネ.
タラオ <: マスオ.
タラオ <: サザエ.
t(A <: A).
t(A <: C) :- A <: B, t(B <: C).
:- t(タラオ <: タラオ).
:- t(タラオ <: サザエ).
:- t(タラオ <: 波平).
:- halt. |
Beta Was this translation helpful? Give feedback.
-
:- op(500,xfx,<:).
t(_,A <: A).
t(Γ,A <: C):- member(A<:B,Γ), t(B<:C).
t(A <: B):- t([nat <: int,int <: rat,rat <: real],A <: B).
:- t(nat <: nat).
:- t(nat <: int).
:- t(nat <: rat).
:- t(nat <: real).
:- halt. 型環境に入れておくとかすればアルゴリズミックな部分型付けの規則になる。 |
Beta Was this translation helpful? Give feedback.
-
@hsk GitHub Discussionが色々な面で不便に感じてきたのでDiscordに移行しても大丈夫ですか? |
Beta Was this translation helpful? Give feedback.
-
日本語で大丈夫ですか?
Beta Was this translation helpful? Give feedback.
All reactions