이 장에서는 개미 수열을 웹으로 출력해 보자. 개미 수열의 100 번째 줄을 알고 싶으면 http://ant-seq.com/100 에서 볼 수 있게. 그러는 중에 뭔가 새로운 개념을 하나 살펴볼 것이다. 이 장에서 살펴볼 개념은 바로 리액티브 스트림이다.
노드(Node)를 이용하여 개미 수열을 출력하는 서버를 만들어보자. "Hello World" 예제를 조금 바꿔서 빠르게 구현해 보자.
이 장에서는 개미 수열을 웹으로 출력해 보자. 개미 수열의 100 번째 줄을 알고 싶으면 http://ant-seq.com/100 에서 볼 수 있게. 그러는 중에 뭔가 새로운 개념을 하나 살펴볼 것이다. 이 장에서 살펴볼 개념은 바로 리액티브 스트림이다.
노드(Node)를 이용하여 개미 수열을 출력하는 서버를 만들어보자. "Hello World" 예제를 조금 바꿔서 빠르게 구현해 보자.
package com.jooyunghan; | |
import org.apache.http.HttpEntity; | |
import org.apache.http.entity.mime.content.ContentBody; | |
import java.io.IOException; | |
import java.io.OutputStream; | |
public class EntityBody implements ContentBody { | |
private final HttpEntity entity; |
package main | |
import ( | |
"bytes" | |
"encoding/json" | |
"fmt" | |
"mime" | |
"mime/multipart" | |
"mime/quotedprintable" | |
"net/http" |
package main | |
import ( | |
"bytes" | |
"crypto/aes" | |
"crypto/cipher" | |
"crypto/rand" | |
"fmt" | |
) |
const data = { | |
users: { | |
u1: "UserName1", | |
u2: "UserName2", | |
u3: "UserName3", | |
u4: "UserName4" | |
}, | |
groups: { | |
FP: ["u1", "u2", "u3"], | |
OOP: ["u2", "u3"] |
// Blog example | |
const getPostIds = () => dataFetch({ type: 'FetchPosts' }); | |
const getPostInfo = id => dataFetch({ type: 'FetchPostInfo', id }); | |
function* blog() { | |
let [ids, x] = yield [getPostIds(), getPostIds()]; | |
return yield ids.map(id => getPostInfo(id)); | |
} |
const FAIL = {}; | |
const CALL = {}; | |
let _input; | |
let _pos; | |
function parse(input) { | |
_input = input; | |
_pos = 0; |
hikaMaeng 님께서 질문 주신 글에 대한 답변입니다.
FAIL 같은 건 좀 필요없어 보이기도 하네요. 흠. 그냥 파서 함수 코드를 읽기 쉽게 하려다 보니 쉽게 접근한거 같습니다.
먼저 Recursive Descent Parser를 짧게 소개하면서 "문법에 따라 거의 기계적으로 만들 수 있기 때문에"라고 했습니다.
바로 이 부분을 강조하려고 하다보니 이러한 모양이 나왔습니다.
const FAIL = {}; | |
let _input; | |
let _pos; | |
function parse(input) { | |
_input = input; | |
_pos = 0; | |
let stack = [parens()]; |
function even(n) { | |
if (n === 0) return true; | |
else return () => odd(n-1); | |
} | |
function odd(n) { | |
if (n === 0) return false; | |
else return () => even(n-1); | |
} | |
function trampoline(f) { | |
while (typeof f === 'function') { |