Common Lispの総称関数みたいな複数レシーバ (multiple dispatching) のOOP言語(Lispでない)を考えるとなにかならないかなあ…。
CLOSのmultiple dispatchはこう
;; メソッド定義
;; (ql:quickload '(:alexandria :split-sequence :cl-opengl :cl-glfw3)) | |
(defpackage :lispteatime-3d-cubes | |
(:use :cl | |
:alexandria) | |
(:export :model | |
:model-vertices | |
:model-uv-mappings | |
:model-texture | |
:parse-obj |
package main | |
import ( | |
"fmt" | |
"os" | |
"unicode" | |
) | |
type TokenType int |
スタックまわりの挙動によって、テストで積まれたスタックの要素が次に残っているようでした。
各ユニットテストの実行前にスタックの初期化(stack.c
のstatic int top
を-1
に設定しなおすこと)をしていないので、前のテスト実行後の状態が残っています。だいたいのテストはスタックが空になって終了するので問題ないですが、一部(発見したのはtest_eval_num_pop()
)のテストではスタックに値が残るので、以降はテスト開始時常にその値が入った状態でテストが始まっているようです。ただ、テストではスタックトップの状態をexpects分だけポップして比較しているので問題は起こっていなさそうでした。
(defun -& (ak bk k) | |
"引き算 (継続版)。 | |
値を得る継続 (ak, bk) から得た値で引き算して、それを次の継続に渡す" | |
(funcall (funcall (lambda (a) | |
(lambda (b) | |
(funcall k (- a b)))) | |
(funcall ak (lambda (v) v))) | |
(funcall bk (lambda (v) v)))) | |
(defun +& (ak bk k) |
EMPTY = 0 | |
class Stack(): | |
def __init__(self): | |
self.stack = [] | |
def push(self, x): | |
self.stack.append(x) | |
def pop(self): |
// test code for mimium: https://github.com/mimium-org/mimium | |
// wav file should be: | |
// - 48kHz sampling rate | |
// - monoraul (1ch) | |
sample_rate = 48000 | |
pi = 3.141592 | |
// kick | |
kick_path = "./kick.wav" |
#!/bin/sh | |
#|-*- mode:lisp -*-|# | |
#| | |
exec ros -Q -- $0 "$@" | |
|# | |
(progn ;;init forms | |
(ros:ensure-asdf) | |
#+quicklisp(ql:quickload '(:jonathan :dexador) :silent t) | |
) |