# 4d: Parsing (Tracing)

## `+last` <a href="#last" id="last"></a>

Further trace.

Compares two line-column pairs, `.zyc` and `.naz`, producing whichever is further along.

#### Accepts

`.zyc` is a `$hair`.

`.naz` is a `$hair`.

#### Produces

A `$hair`.

#### Source

```hoon
++  last  |=  [zyc=hair naz=hair]
          ^-  hair
          ?:  =(p.zyc p.naz)
            ?:((gth q.zyc q.naz) zyc naz)
          ?:((gth p.zyc p.naz) zyc naz)
```

#### Examples

```
> (last [1 1] [1 2])
[p=1 q=2]
```

```
> (last [2 1] [1 2])
[p=2 q=1]
```

```
> (last [0 0] [99 0])
[p=99 q=0]
```

```
> (last [7 7] [7 7])
[p=7 q=7]
```

***

## `+lust` <a href="#lust" id="lust"></a>

Detect newline.

Advances `.naz` by a row if the `.weq` is a newline, or by a column if `.weq` is any other character.

#### Accepts

`.weq` is a `+char`.

`.naz` is a `$hair`.

#### Produces

A `$hair`.

#### Source

```hoon
++  lust  |=  [weq=char naz=hair]
          ^-  hair
          ?:(=(`@`10 weq) [+(p.naz) 1] [p.naz +(q.naz)])
```

#### Examples

```
> (lust 'a' [1 1])
[p=1 q=2]
```

```
> (lust `@t`10 [1 1])
[p=2 q=1]
```

```
> (lust '9' [10 10])
[p=10 q=11]
```

```
> (roll "maze" [.(+<+ [1 1])]:lust)
[1 5]
```

```
> %-  roll  :_  [.(+<+ [1 1])]:lust
  """
  Sam
  lokes
  """
[2 6]
```

***
