lambda

pow

高階関数クイズ - Oh, you `re no (fun _ → more) チャーチ数の冪乗計算を知っていれば。 POW := λbe.e b http://en.wikipedia.org/wiki/Lambda_calculus これ紙に書いて確かめてみるととても面白い。 という訳で twice twice twice twice add1 0 = (((twice…

GrassでLLGolf Hole 8 準備

(load "grass-primitive.l") (defun % (&rest arg) (reduce #'funcall arg)) (defun $ (&rest arg) (reduce #'funcall arg :from-end t)) (defvar y (lambda (f) ($ (lambda (g) ($ f (lambda (x) (% g g x)))) (lambda (g) ($ f (lambda (x) (% g g x))))))…

ラムダ計算でナベアツ的な何か

(load "lambda-calc.l") (load "grass-primitive.l") (defvar %floor (lambda (m) (lambda (n) (funcall (% (% %ge m n) (lambda () (let ((c (% %floor (% %sub m n) n))) (% %cons ($ %succ %car c) (% %cdr c)))) (lambda () (% %cons %0 m))))))) (defun…

ラムダ計算遊び用コード まとめ

昨日見つけたページに倣ってλ項の名前には全部頭に%をつけて、ついでに左から適用してく関数を%としてみた。 とりあえずxyzzyとSBCLで動いてるけど、真偽値の辺りちゃんとテストしてない。 ; utility (defun % (&rest arg) (reduce #'funcall arg)) (defun $…

Grassとラムダ計算とLisp

Lispのlambda式の使い方が分かってきた頃に書き溜めたラムダ計算遊び用のコードと組み合わせてみる。 まず、繰り返し関数適用してく時にCommonLispだとfuncallが大変ウザくなるので、省略するための簡単なユーティリティー関数。 (defun app (&rest arg) (re…

Grass再挑戦

ちょっと草植えときますね型言語 Grass 日本語版解説 最初に見たときは面白そうなのにほとんど理解できなくて悲しかったけど、λ計算とLispの基礎をかじった今なら少しは書けそうだ。で、一昨日ちょっと書いたプリミティブ関数を書き直し。 w (文字関数) 文字…