作者cybermeow (我有一只猫)
看板Programming
标题[问题] Julia函数可能有解也可能没有的情况
时间Fri Oct 20 05:08:34 2017
我平常喜欢的程式语言很多在台湾可能都偏冷
自然PTT这里也没有专版
其实这样应该直接去StackOverflow啦
但毕竟有个programming版摆在这里还是来看看
最近开始接触Julia
虽然跟Matlab和R一样index从1开始令人受不了
但感觉还算是一个蛮帅的语言
动态却有一套不错复杂的type system. 还有multiple dispatch都挺让人惊艳的
不过由於蛮新的网路上资源相较少
我看到doc有提到说一个函数要尽量回传相同的type
我想请问像是假设我现在要有一个函数来解决一些constraint的feasibility的问题 (例
如LP
有feasible的点就回传
不然回传确定infeasible或者技术问题无法判断
这时候通常会怎麽做?
1. 除了确定feasible都throw exeption
2. 像一般没在管type的language一样有时回传vector有时回传string
3. 我个人超想用Haskell的Either 但这应该不是Julia解决问题的方式
4. 算是类似上面吧 用个enum(variant)的type来解决 尤其不同的情况分别是一个分支
但显然Julia不直接支援代表这应该也不是Julia的解决方式
5. 类似C同样回传vector但一些特殊的值代表不同的意思 我看一下简单的预定义函数就
是用类似的方法 像是找东西找不到回传index 0之类的 但是在情况复杂化时感觉会很麻
烦
6. 回传一个Symbol和Nullable{AbstractVector{<:Real}}的couple之类的
我目前是直接用2不过比起string回传symbol 虽然好像没啥差
Julia由於网路资源不多常常都不知道怎样是比较好的practice
像是什麽时候函数参数要给type比较好 怎样给比较适合
甚至连naming convention都有点复杂 (要不要_之类的
然後第一次在这个版发文 最喜欢的语言是OCaml
虽然写到一半的tuto被冷冻一段时间了
然後PLT比这边更冷
虽然PTT本来性质就不太偏这种东西
请多多指教这样
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 92.90.16.47
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1508447317.A.051.html
1F:→ MOONRAKER: ……阵列1 base就受不了 只能称为怪癖 220.135.118.23 10/20 10:58
2F:→ cybermeow: 单纯习惯问题吧 (茶 不过因为其他方 77.136.18.150 10/20 13:20
3F:→ cybermeow: 面目前看起来不错就算了 77.136.18.150 10/20 13:20
4F:推 CoNsTaR: 看了一下教学文件,可以用 typeof 来实现174.116.112.109 10/21 00:15
5F:→ CoNsTaR: 吗?174.116.112.109 10/21 00:15
6F:→ CoNsTaR: 不过如果语言有支援的话,我会比较想用 r174.116.112.109 10/21 00:15
7F:→ CoNsTaR: efinement types 来做174.116.112.109 10/21 00:15
8F:→ cybermeow: 用inner constructor来做算是有支援 77.136.18.150 10/21 00:48
9F:→ cybermeow: 但是我看不出来要怎麽应用 关键在於回 77.136.18.150 10/21 00:48
10F:→ cybermeow: 传的type要长怎样才好 不过这可能不好 77.136.18.150 10/21 00:48
11F:→ cybermeow: 回答吧 77.136.18.150 10/21 00:48
12F:推 CoNsTaR: 假设函数可能回传A、B两个型别174.116.112.109 10/21 01:59
13F:→ CoNsTaR: 那有 refinement type 的话就可以把会让174.116.112.109 10/21 01:59
14F:→ CoNsTaR: 函数回传 B 的参数 refine 掉174.116.112.109 10/21 01:59
15F:→ CoNsTaR: 这样就能保证函数只会回传 A174.116.112.109 10/21 01:59
16F:→ cybermeow: 嗯嗯只是这里的问题是要计算过後才知道 77.136.18.150 10/21 04:11
17F:→ cybermeow: 有没有解 而且refine掉感觉跟throw exc 77.136.18.150 10/21 04:11
18F:→ cybermeow: eption一个意思 77.136.18.150 10/21 04:11
19F:推 CoNsTaR: 是啊,支援 refinement type 的语言是在 24.114.79.93 10/21 09:24
20F:→ CoNsTaR: compile time 用 SMT solver 来求成员 24.114.79.93 10/21 09:25
21F:→ CoNsTaR: 的 24.114.79.93 10/21 09:25
22F:→ CoNsTaR: 不过我也觉得 refinement type 应该不是 24.114.79.93 10/21 09:25
23F:→ CoNsTaR: julia 的风格 24.114.79.93 10/21 09:25