本文書は、Michael T. Barry作のソフトウェア「VTLC02」 ソースコード中のコメントを日本語に翻訳したものです。
また見出しは、Markdownに整形するにあたり翻訳者が便宜上つけたものです。
原文リポジトリのURL https://github.com/barrym95838/6502-Assembly/blob/main/VTLC02
| import {Pair, State} from "./state" | |
| // ---------------------- | |
| // 自動販売機の実装 | |
| enum Input { | |
| Coin, | |
| Turn | |
| } |
| <?php | |
| declare(strict_types=1); | |
| interface Monoid | |
| { | |
| public function canBeInstance($a): bool; | |
| public function append($a1, $a2); | |
| public function zero(); | |
| } |
| from typing import Optional | |
| def maybe(func): | |
| def fn(*args, **kwargs): | |
| try: | |
| ret = func(*args, **kwargs) | |
| if ret: | |
| return [ret] | |
| else: | |
| return[] |
| from typing import List | |
| def parseInt(input: str) -> List[int]: | |
| try: | |
| return [int(input)] | |
| except ValueError: | |
| return [] | |
| def findUser(code: int) -> List[dict]: | |
| users = { |
本文書は、Michael T. Barry作のソフトウェア「VTLC02」 ソースコード中のコメントを日本語に翻訳したものです。
また見出しは、Markdownに整形するにあたり翻訳者が便宜上つけたものです。
原文リポジトリのURL https://github.com/barrym95838/6502-Assembly/blob/main/VTLC02
| 100 ?="start address? "; | |
| 110 A=? | |
| 120 ?="end arress? "; | |
| 130 E=? | |
| 150 :1)=# | |
| 160 ?=A | |
| 170 ?=": "; | |
| 180 I=0 | |
| 190 :2)=# | |
| 200 <=A+I |
| CALL$EA00 | |
| ==02000 | |
| &=0 | |
| 10 F=50 | |
| 20 Y=-12 | |
| 30 X=-39 | |
| 40 C=X*229/100 | |
| 50 D=Y*416/100 | |
| 60 A=C |
パーサーの定義の最後にある (input) の文法的な意味を教えてください
Rustでは、関数は値を返すことができますが、その返り値は最後に評価された式です。この特性を利用して、関数の本体を括弧で囲むことで、その関数が別の関数に引数として渡されることを可能にします。このパターンは、高階関数(他の関数を引数として取る関数)を使用する際によく見られます。
ここでの (input) は、nom パーサーコンビネータの一部で、これは関数を返します。この関数は、入力文字列(ここでは input)を引数として取り、パース結果を返します。つまり、 (input) はパーサー関数を実行しています。
例えば、以下のコードを見てみましょう: