コラッツ予想がとけたらいいな2

自分の考察を書いていきます。

Curry をやってみた その2(双子素数)

Curry は、パターンマッチの場所に関数を(演算子も)書けるみたいです。

前準備

$ cypm install searchtree
$ cypm add searchtree

Prime.curry

module Prime where

import Control.Findall (allValues)

primes :: [Int]
primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

getTwin :: [Int] -> (Int, Int)
getTwin (_ ++ x : x + 2 : _) = (x, x + 2)

getTwinList :: [Int] -> [(Int, Int)]
getTwinList = allValues . getTwin

コードが Egison だ Egison 。

実行

$ pakcs
Prelude> :l Prime
Prime> getTwin primes
(3,5)
(5,7)
(11,13)
(17,19)
(29,31)
(41,43)
(59,61)
(71,73)

なんかいっぱい出たー
Curry(PAKCS) はパターンにマッチしたものを
全て出力するみたいだ。

リストで出したい場合は関数allValuesを使う。

Prime> getTwinList primes
[(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61),(71,73)]




Curry をやってみた その1(階乗)

環境は Ubuntu 20.04.2 LTS です。
こちらの記事を参考にさせて頂いた。
Curryで関数論理型言語を体験してみた - Qiita

実装の一つである PAKCS をインストール

$ sudo apt install pakcs
packs ではない。

VSCode で「Curry Syntax Highlighting」をインストール。

Fact.curry

module Fact where

fact :: Int -> Int
fact n
  | n == 0 = 1
  | otherwise = n * fact (n - 1)

$ pakcs で起動して、

Prelude> :l Fact
[1 of 2] Skipping  Prelude          ( /usr/lib/pakcs/lib/Prelude.curry, /usr/lib/pakcs/lib/.curry/Prelude.fcy )
[2 of 2] Compiling Fact             ( Fact.curry, .curry/Fact.fcy )
Fact> fact 4
24

となる。今日はここまで。